No public description

PiperOrigin-RevId: 795060273
Change-Id: I24b1ba07ef568e51289243262cd3395ecc7c5d01
diff --git a/mpact/sim/decoder/antlr_parser_wrapper.h b/mpact/sim/decoder/antlr_parser_wrapper.h
index cee8e73..86a5e64 100644
--- a/mpact/sim/decoder/antlr_parser_wrapper.h
+++ b/mpact/sim/decoder/antlr_parser_wrapper.h
@@ -28,14 +28,14 @@
 template <typename Parser, typename Lexer>
 class AntlrParserWrapper {
  public:
-  explicit AntlrParserWrapper(std::istream *source_stream) {
+  explicit AntlrParserWrapper(std::istream* source_stream) {
     instruction_set_input_.load(*source_stream, /*lenient=*/true);
     lexer_ = new Lexer(&instruction_set_input_);
     tokens_ = new antlr4::CommonTokenStream(lexer_);
     parser_ = new Parser(tokens_);
   }
 
-  explicit AntlrParserWrapper(const std::string &source) {
+  explicit AntlrParserWrapper(const std::string& source) {
     instruction_set_input_.load(source, /*lenient=*/true);
     lexer_ = new Lexer(&instruction_set_input_);
     tokens_ = new antlr4::CommonTokenStream(lexer_);
@@ -48,13 +48,13 @@
     delete lexer_;
   }
 
-  Parser *parser() const { return parser_; }
+  Parser* parser() const { return parser_; }
 
  private:
   antlr4::ANTLRInputStream instruction_set_input_;
-  Lexer *lexer_;
-  antlr4::CommonTokenStream *tokens_;
-  Parser *parser_;
+  Lexer* lexer_;
+  antlr4::CommonTokenStream* tokens_;
+  Parser* parser_;
 };
 
 }  // namespace decoder
diff --git a/mpact/sim/decoder/base_class.h b/mpact/sim/decoder/base_class.h
index 7e04b66..2deb0ba 100644
--- a/mpact/sim/decoder/base_class.h
+++ b/mpact/sim/decoder/base_class.h
@@ -27,11 +27,11 @@
 
 template <typename T>
 struct BaseClass {
-  const T *base;
-  TemplateInstantiationArgs *arguments = nullptr;
-  BaseClass(const T *base_, TemplateInstantiationArgs *arguments_)
+  const T* base;
+  TemplateInstantiationArgs* arguments = nullptr;
+  BaseClass(const T* base_, TemplateInstantiationArgs* arguments_)
       : base(base_), arguments(arguments_) {}
-  explicit BaseClass(const T *base_) : base(base_) {}
+  explicit BaseClass(const T* base_) : base(base_) {}
 };
 
 }  // namespace instruction_set
diff --git a/mpact/sim/decoder/bin_decoder.cc b/mpact/sim/decoder/bin_decoder.cc
index 799871b..0c29cc4 100644
--- a/mpact/sim/decoder/bin_decoder.cc
+++ b/mpact/sim/decoder/bin_decoder.cc
@@ -25,20 +25,20 @@
 namespace decoder {
 namespace bin_format {
 
-BinDecoder::BinDecoder(std::string name, BinEncodingInfo *encoding_info,
-                       DecoderErrorListener *error_listener)
+BinDecoder::BinDecoder(std::string name, BinEncodingInfo* encoding_info,
+                       DecoderErrorListener* error_listener)
     : name_(name),
       encoding_info_(encoding_info),
       error_listener_(error_listener) {}
 
 BinDecoder::~BinDecoder() { instruction_group_vec_.clear(); }
 
-void BinDecoder::AddInstructionGroup(InstructionGroup *group) {
+void BinDecoder::AddInstructionGroup(InstructionGroup* group) {
   instruction_group_vec_.push_back(group);
 }
 
 void BinDecoder::CheckEncodings() {
-  for (auto *group : instruction_group_vec_) {
+  for (auto* group : instruction_group_vec_) {
     group->ProcessEncodings();
     group->CheckEncodings();
   }
diff --git a/mpact/sim/decoder/bin_decoder.h b/mpact/sim/decoder/bin_decoder.h
index e8b3572..f2e7f25 100644
--- a/mpact/sim/decoder/bin_decoder.h
+++ b/mpact/sim/decoder/bin_decoder.h
@@ -37,35 +37,35 @@
 class BinDecoder {
  public:
   using InstructionGroupMultiMap =
-      absl::btree_multimap<std::string, InstructionGroup *>;
+      absl::btree_multimap<std::string, InstructionGroup*>;
 
-  BinDecoder(std::string name, BinEncodingInfo *encoding_info,
-             DecoderErrorListener *error_listener);
+  BinDecoder(std::string name, BinEncodingInfo* encoding_info,
+             DecoderErrorListener* error_listener);
   ~BinDecoder();
 
   // Checks for invalid encodings, such as some duplicates.
   void CheckEncodings();
   // Select instruction group for decoder generation.
-  void AddInstructionGroup(InstructionGroup *group);
+  void AddInstructionGroup(InstructionGroup* group);
 
   // Accessors.
-  const std::string &name() const { return name_; }
-  DecoderErrorListener *error_listener() const { return error_listener_; }
-  BinEncodingInfo *encoding_info() const { return encoding_info_; }
-  std::vector<InstructionGroup *> instruction_group_vec() {
+  const std::string& name() const { return name_; }
+  DecoderErrorListener* error_listener() const { return error_listener_; }
+  BinEncodingInfo* encoding_info() const { return encoding_info_; }
+  std::vector<InstructionGroup*> instruction_group_vec() {
     return instruction_group_vec_;
   }
-  std::deque<std::string> &namespaces() { return namespaces_; }
+  std::deque<std::string>& namespaces() { return namespaces_; }
 
  private:
   // Decoder name.
   std::string name_;
   // The global encoding structure.
-  BinEncodingInfo *encoding_info_;
+  BinEncodingInfo* encoding_info_;
   // Error handler.
-  DecoderErrorListener *error_listener_;
+  DecoderErrorListener* error_listener_;
   // The set of instruction groups in this decoder.
-  std::vector<InstructionGroup *> instruction_group_vec_;
+  std::vector<InstructionGroup*> instruction_group_vec_;
   // Namespace container.
   std::deque<std::string> namespaces_;
 };
diff --git a/mpact/sim/decoder/bin_encoding_info.cc b/mpact/sim/decoder/bin_encoding_info.cc
index b0880a1..92bc125 100644
--- a/mpact/sim/decoder/bin_encoding_info.cc
+++ b/mpact/sim/decoder/bin_encoding_info.cc
@@ -32,16 +32,16 @@
 namespace bin_format {
 
 BinEncodingInfo::BinEncodingInfo(std::string opcode_enum,
-                                 DecoderErrorListener *error_listener)
+                                 DecoderErrorListener* error_listener)
     : opcode_enum_(opcode_enum), error_listener_(error_listener) {}
 
 BinEncodingInfo::~BinEncodingInfo() {
   delete decoder_;
-  for (auto &[unused, format_ptr] : format_map_) {
+  for (auto& [unused, format_ptr] : format_map_) {
     delete format_ptr;
   }
   format_map_.clear();
-  for (auto &[unused, group_ptr] : instruction_group_map_) {
+  for (auto& [unused, group_ptr] : instruction_group_map_) {
     delete group_ptr;
   }
   instruction_group_map_.clear();
@@ -53,8 +53,8 @@
 }
 
 // Adding a format that does not have a parent (to inherit from ).
-absl::StatusOr<Format *> BinEncodingInfo::AddFormat(std::string name,
-                                                    int width) {
+absl::StatusOr<Format*> BinEncodingInfo::AddFormat(std::string name,
+                                                   int width) {
   // Verify that the format name hasn't been used.
   if (format_map_.contains(name)) {
     return absl::AlreadyExistsError(
@@ -66,8 +66,8 @@
 }
 
 // Adding a format that does have a parent.
-absl::StatusOr<Format *> BinEncodingInfo::AddFormat(std::string name, int width,
-                                                    std::string parent_name) {
+absl::StatusOr<Format*> BinEncodingInfo::AddFormat(std::string name, int width,
+                                                   std::string parent_name) {
   // Verify that the format name hasn't been used.
   if (format_map_.contains(name)) {
     return absl::AlreadyExistsError(
@@ -79,7 +79,7 @@
 }
 
 // Lookup a format by name. Return nullptr if it isn't found.
-Format *BinEncodingInfo::GetFormat(absl::string_view name) const {
+Format* BinEncodingInfo::GetFormat(absl::string_view name) const {
   auto iter = format_map_.find(name);
   if (iter == format_map_.end()) return nullptr;
   return iter->second;
@@ -87,7 +87,7 @@
 
 // Add the named instruction group. Instruction encodings are added directly
 // to the group using the returned pointer.
-absl::StatusOr<InstructionGroup *> BinEncodingInfo::AddInstructionGroup(
+absl::StatusOr<InstructionGroup*> BinEncodingInfo::AddInstructionGroup(
     std::string name, int width, std::string format_name) {
   if (instruction_group_map_.contains(name)) {
     return absl::AlreadyExistsError(
@@ -102,26 +102,26 @@
 // Top level method that calls the checking method of each format. This is
 // called after all the formats have been added.
 void BinEncodingInfo::PropagateExtractors() {
-  for (auto &[unused, format] : format_map_) {
+  for (auto& [unused, format] : format_map_) {
     // For the base formats (those who do not inherit from another format).
     if (format->base_format() == nullptr) {
       format->PropagateExtractorsUp();
     }
   }
 
-  for (auto &[unused, format] : format_map_) {
+  for (auto& [unused, format] : format_map_) {
     if (format->base_format() == nullptr) {
       format->PropagateExtractorsDown();
     }
   }
 }
 
-BinDecoder *BinEncodingInfo::AddBinDecoder(std::string name) {
+BinDecoder* BinEncodingInfo::AddBinDecoder(std::string name) {
   if (decoder_ != nullptr) {
     error_listener_->semanticError(nullptr, "Can only select one decoder");
     return nullptr;
   }
-  auto *bin_decoder = new BinDecoder(name, this, error_listener());
+  auto* bin_decoder = new BinDecoder(name, this, error_listener());
   decoder_ = bin_decoder;
   return bin_decoder;
 }
diff --git a/mpact/sim/decoder/bin_encoding_info.h b/mpact/sim/decoder/bin_encoding_info.h
index 918198c..f046b64 100644
--- a/mpact/sim/decoder/bin_encoding_info.h
+++ b/mpact/sim/decoder/bin_encoding_info.h
@@ -36,57 +36,57 @@
 // instruction format input file.
 class BinEncodingInfo {
  public:
-  using InstructionGroupMap = absl::btree_map<std::string, InstructionGroup *>;
-  using FormatMap = absl::btree_map<std::string, Format *>;
+  using InstructionGroupMap = absl::btree_map<std::string, InstructionGroup*>;
+  using FormatMap = absl::btree_map<std::string, Format*>;
 
   BinEncodingInfo() = delete;
   BinEncodingInfo(std::string opcode_enum,
-                  DecoderErrorListener *error_listener);
+                  DecoderErrorListener* error_listener);
   ~BinEncodingInfo();
 
   // Add a file to be included in the generated code.
   void AddIncludeFile(std::string include_file);
   // Add instruction format declaration - no parent (inherited) format.
-  absl::StatusOr<Format *> AddFormat(std::string name, int width);
+  absl::StatusOr<Format*> AddFormat(std::string name, int width);
   // Add instruction format declaration with a parent format.
-  absl::StatusOr<Format *> AddFormat(std::string name, int width,
-                                     std::string parent_name);
+  absl::StatusOr<Format*> AddFormat(std::string name, int width,
+                                    std::string parent_name);
   // Returns the pointer to the format with the given name, or nullptr if it
   // hasn't been added.
-  Format *GetFormat(absl::string_view name) const;
+  Format* GetFormat(absl::string_view name) const;
 
   // Add the instruction group declaration.
-  absl::StatusOr<InstructionGroup *> AddInstructionGroup(
+  absl::StatusOr<InstructionGroup*> AddInstructionGroup(
       std::string name, int width, std::string format_name);
 
   // Propagates bitfield extractors where possible.
   void PropagateExtractors();
 
   // Create and add binary decoder descriptor.
-  BinDecoder *AddBinDecoder(std::string name);
+  BinDecoder* AddBinDecoder(std::string name);
 
   // Accessors.
-  const FormatMap &format_map() const { return format_map_; }
-  const InstructionGroupMap &instruction_group_map() const {
+  const FormatMap& format_map() const { return format_map_; }
+  const InstructionGroupMap& instruction_group_map() const {
     return instruction_group_map_;
   }
-  DecoderErrorListener *error_listener() const { return error_listener_; }
-  const absl::btree_set<std::string> &include_files() const {
+  DecoderErrorListener* error_listener() const { return error_listener_; }
+  const absl::btree_set<std::string>& include_files() const {
     return include_files_;
   }
-  BinDecoder *decoder() const { return decoder_; }
+  BinDecoder* decoder() const { return decoder_; }
   std::string opcode_enum() const { return opcode_enum_; }
 
  private:
   std::string opcode_enum_;
   // The error listener is passed from the parse tree visitor. It is used to
   // report semantic errors found during later checks.
-  DecoderErrorListener *error_listener_;
+  DecoderErrorListener* error_listener_;
   FormatMap format_map_;
   InstructionGroupMap instruction_group_map_;
   // Include files.
   absl::btree_set<std::string> include_files_;
-  BinDecoder *decoder_ = nullptr;
+  BinDecoder* decoder_ = nullptr;
 };
 
 }  // namespace bin_format
diff --git a/mpact/sim/decoder/bin_format_gen_main.cc b/mpact/sim/decoder/bin_format_gen_main.cc
index e2107f3..782abdb 100644
--- a/mpact/sim/decoder/bin_format_gen_main.cc
+++ b/mpact/sim/decoder/bin_format_gen_main.cc
@@ -36,7 +36,7 @@
 ABSL_FLAG(std::string, decoder_name, "", "decoder name to generate");
 ABSL_FLAG(std::string, include, "", "include file root(s)");
 
-int main(int argc, char **argv) {
+int main(int argc, char** argv) {
   auto arg_vec = absl::ParseCommandLine(argc, argv);
 
   std::vector<std::string> file_names;
diff --git a/mpact/sim/decoder/bin_format_visitor.cc b/mpact/sim/decoder/bin_format_visitor.cc
index 75e5477..2d8fc8a 100644
--- a/mpact/sim/decoder/bin_format_visitor.cc
+++ b/mpact/sim/decoder/bin_format_visitor.cc
@@ -131,7 +131,7 @@
 }
 
 BinFormatVisitor::~BinFormatVisitor() {
-  for (auto *wrapper : antlr_parser_wrappers_) {
+  for (auto* wrapper : antlr_parser_wrappers_) {
     delete wrapper;
   }
   antlr_parser_wrappers_.clear();
@@ -140,17 +140,17 @@
 using ::mpact::sim::machine_description::instruction_set::ToHeaderGuard;
 
 absl::Status BinFormatVisitor::Process(
-    const std::vector<std::string> &file_names, const std::string &decoder_name,
-    absl::string_view prefix, const std::vector<std::string> &include_roots,
+    const std::vector<std::string>& file_names, const std::string& decoder_name,
+    absl::string_view prefix, const std::vector<std::string>& include_roots,
     absl::string_view directory) {
   decoder_name_ = decoder_name;
 
   include_dir_vec_.push_back(".");
-  for (const auto &root : include_roots) {
+  for (const auto& root : include_roots) {
     include_dir_vec_.push_back(root);
   }
 
-  std::istream *source_stream = &std::cin;
+  std::istream* source_stream = &std::cin;
 
   if (!file_names.empty()) {
     source_stream = new std::fstream(file_names[0], std::fstream::in);
@@ -166,7 +166,7 @@
   parser_wrapper.parser()->addErrorListener(error_listener());
 
   // Parse the file and then create the data structures.
-  TopLevelCtx *top_level = parser_wrapper.parser()->top_level();
+  TopLevelCtx* top_level = parser_wrapper.parser()->top_level();
   (void)top_level;
   if (!file_names.empty()) {
     delete source_stream;
@@ -247,13 +247,13 @@
   return absl::OkStatus();
 }
 
-void BinFormatVisitor::PerformEncodingChecks(BinEncodingInfo *encoding) {
+void BinFormatVisitor::PerformEncodingChecks(BinEncodingInfo* encoding) {
   encoding->decoder()->CheckEncodings();
 }
 
 BinFormatVisitor::StringTriple BinFormatVisitor::EmitDecoderFilePrefix(
-    const std::string &dot_h_name, const std::string &types_dot_h_name,
-    BinEncodingInfo *encoding_info) const {
+    const std::string& dot_h_name, const std::string& types_dot_h_name,
+    BinEncodingInfo* encoding_info) const {
   std::string h_string;
   std::string cc_string;
   std::string types_string;
@@ -284,7 +284,7 @@
                   "#include <iostream>\n"
                   "#include <cstdint>\n"
                   "\n");
-  for (auto const &include_file : encoding_info->include_files()) {
+  for (auto const& include_file : encoding_info->include_files()) {
     absl::StrAppend(&h_string, "#include ", include_file, "\n");
   }
   absl::StrAppend(&h_string, "\n");
@@ -292,7 +292,7 @@
                   "\"\n"
                   "#include \"",
                   types_dot_h_name, "\"\n\n");
-  for (auto &name_space : encoding_info->decoder()->namespaces()) {
+  for (auto& name_space : encoding_info->decoder()->namespaces()) {
     auto name_space_str = absl::StrCat("namespace ", name_space, " {\n");
     absl::StrAppend(&h_string, name_space_str);
     absl::StrAppend(&cc_string, name_space_str);
@@ -308,7 +308,7 @@
                   "enum class FormatEnum {\n"
                   "  kNone = 0,\n");
   int i = 1;
-  for (auto &[name, unused] : encoding_info->format_map()) {
+  for (auto& [name, unused] : encoding_info->format_map()) {
     absl::StrAppend(&h_string, "  k", ToPascalCase(name), " = ", i++, ",\n");
   }
   absl::StrAppend(&h_string, "};\n\n");
@@ -316,8 +316,8 @@
 }
 
 BinFormatVisitor::StringTriple BinFormatVisitor::EmitFileSuffix(
-    const std::string &dot_h_name, const std::string &types_dot_h_name,
-    BinEncodingInfo *encoding_info) {
+    const std::string& dot_h_name, const std::string& types_dot_h_name,
+    BinEncodingInfo* encoding_info) {
   std::string h_string;
   std::string cc_string;
   std::string types_string;
@@ -325,7 +325,7 @@
   absl::StrAppend(&h_string, "\n");
   absl::StrAppend(&cc_string, "\n");
   if (!types_dot_h_name.empty()) absl::StrAppend(&types_string, "\n");
-  auto &namespaces = encoding_info->decoder()->namespaces();
+  auto& namespaces = encoding_info->decoder()->namespaces();
   for (auto rptr = namespaces.rbegin(); rptr != namespaces.rend(); rptr++) {
     std::string name_space = absl::StrCat("}  // namespace ", *rptr, "\n");
     absl::StrAppend(&h_string, name_space);
@@ -342,7 +342,7 @@
 }
 
 BinFormatVisitor::StringTriple BinFormatVisitor::EmitDecoderCode(
-    BinEncodingInfo *encoding) {
+    BinEncodingInfo* encoding) {
   std::string h_string;
   std::string cc_string;
   std::string group_string;
@@ -350,16 +350,16 @@
   std::string extractor_class =
       absl::StrCat("class Extractors {\n", "public: \n");
   // Write out the inline functions for bitfield and overlay extractions.
-  for (auto &[unused, format_ptr] : encoding->format_map()) {
+  for (auto& [unused, format_ptr] : encoding->format_map()) {
     auto extractors = format_ptr->GenerateExtractors();
     absl::StrAppend(&h_string, extractors.h_output);
     absl::StrAppend(&extractor_class, extractors.class_output);
     absl::StrAppend(&extractor_types, extractors.types_output);
   }
   absl::StrAppend(&h_string, extractor_class, "};\n\n");
-  auto *decoder = encoding->decoder();
+  auto* decoder = encoding->decoder();
   // Generate the code for decoders.
-  for (auto *group : decoder->instruction_group_vec()) {
+  for (auto* group : decoder->instruction_group_vec()) {
     auto [h_decoder, cc_decoder] = group->EmitDecoderCode();
     absl::StrAppend(&h_string, h_decoder);
     absl::StrAppend(&cc_string, cc_decoder);
@@ -372,8 +372,8 @@
 }
 
 std::tuple<std::string, std::string> BinFormatVisitor::EmitEncoderFilePrefix(
-    const std::string &dot_h_name, const std::string &enum_h_name,
-    const std::string &types_dot_h_name, BinEncodingInfo *encoding_info) const {
+    const std::string& dot_h_name, const std::string& enum_h_name,
+    const std::string& types_dot_h_name, BinEncodingInfo* encoding_info) const {
   std::string h_string;
   std::string cc_string;
 
@@ -404,7 +404,7 @@
                   "\"\n"
                   "#include \"",
                   types_dot_h_name, "\"\n\n");
-  for (auto &name_space : encoding_info->decoder()->namespaces()) {
+  for (auto& name_space : encoding_info->decoder()->namespaces()) {
     auto name_space_str = absl::StrCat("namespace ", name_space, " {\n");
     absl::StrAppend(&cc_string, name_space_str);
     absl::StrAppend(&h_string, name_space_str);
@@ -416,21 +416,21 @@
 }
 
 std::tuple<std::string, std::string> BinFormatVisitor::EmitEncoderCode(
-    BinEncodingInfo *encoding) {
+    BinEncodingInfo* encoding) {
   std::string h_string;
   std::string cc_string;
   // Write out the inline functions for bitfield and overlay encoding.
   absl::StrAppend(&h_string, "struct Encoder {\n\n");
-  for (auto &[unused, format_ptr] : encoding->format_map()) {
+  for (auto& [unused, format_ptr] : encoding->format_map()) {
     auto functions = format_ptr->GenerateInserters();
     absl::StrAppend(&h_string, functions);
   }
   absl::StrAppend(&h_string, "};  // struct Encoder\n\n");
   absl::flat_hash_set<std::string> groups;
-  auto *decoder = encoding->decoder();
+  auto* decoder = encoding->decoder();
   // Generate the code for decoders.
   absl::btree_map<std::string, std::tuple<uint64_t, int>> encodings;
-  for (auto *group : decoder->instruction_group_vec()) {
+  for (auto* group : decoder->instruction_group_vec()) {
     group->GetInstructionEncodings(encodings);
   }
   std::string opcode_enum = encoding->opcode_enum();
@@ -441,7 +441,7 @@
                   opcode_enum,
                   ", std::tuple<uint64_t, int>>> kOpcodeEncodings({\n");
   absl::StrAppend(&cc_string, "  {", opcode_enum, "::kNone, {0x0ULL, 0}},\n");
-  for (auto &[name, pair] : encodings) {
+  for (auto& [name, pair] : encodings) {
     auto [value, width] = pair;
     std::string enum_name =
         absl::StrCat(opcode_enum, "::k", ToPascalCase(name));
@@ -453,7 +453,7 @@
 }
 
 // Parse the range and convert to a BitRange.
-BitRange BinFormatVisitor::GetBitIndexRange(BitIndexRangeCtx *ctx) {
+BitRange BinFormatVisitor::GetBitIndexRange(BitIndexRangeCtx* ctx) {
   int start = ConvertToInt(ctx->number(0));
   int stop = start;
   if (ctx->number().size() == 2) {
@@ -464,7 +464,7 @@
 
 // Parse a binary number string such as 0b1010'0111 and return a BinaryNum
 // to encode the value and width.
-BinaryNum BinFormatVisitor::ParseBinaryNum(TerminalNode *node) {
+BinaryNum BinFormatVisitor::ParseBinaryNum(TerminalNode* node) {
   std::string bin_str = node->getText();
   if (bin_str.substr(0, 2) != "0b") {
     error_listener_->semanticError(node->getSymbol(),
@@ -489,7 +489,7 @@
 }
 
 // Parse a number string and return the value.
-int BinFormatVisitor::ConvertToInt(NumberCtx *ctx) {
+int BinFormatVisitor::ConvertToInt(NumberCtx* ctx) {
   // Binary has to be handled separately.
   auto bin_number = ctx->BIN_NUMBER();
   if (bin_number != nullptr) {
@@ -501,7 +501,7 @@
 }
 
 std::unique_ptr<BinEncodingInfo> BinFormatVisitor::ProcessTopLevel(
-    const std::string &decoder_name) {
+    const std::string& decoder_name) {
   // At this point we have the contexts for all slots, bundles and isas.
   // First make sure the named isa (decoder) has been defined.
   auto decoder_iter = decoder_decl_map_.find(decoder_name);
@@ -517,10 +517,10 @@
   // will have been visited. Build a multi-map from referenced format to parent
   // format.
   absl::btree_multimap<std::string, std::string> reference_map;
-  for (auto &[format_name, ctx_ptr] : format_decl_map_) {
+  for (auto& [format_name, ctx_ptr] : format_decl_map_) {
     // Skip those that have already been visited.
     if (bin_encoding_info->GetFormat(format_name) != nullptr) continue;
-    for (auto *field_ctx : ctx_ptr->format_field_defs()->field_def()) {
+    for (auto* field_ctx : ctx_ptr->format_field_defs()->field_def()) {
       if (field_ctx->format_name != nullptr) {
         reference_map.emplace(field_ctx->format_name->getText(), format_name);
       }
@@ -528,12 +528,12 @@
   }
   // Now, starting at each visited format, traverse links in the reference_map
   // to transitively visit any "parent" formats.
-  std::list<Format *> format_list;
-  for (auto &[unused, fmt_ptr] : bin_encoding_info->format_map()) {
+  std::list<Format*> format_list;
+  for (auto& [unused, fmt_ptr] : bin_encoding_info->format_map()) {
     format_list.push_back(fmt_ptr);
   }
   while (!format_list.empty()) {
-    auto *format = format_list.front();
+    auto* format = format_list.front();
     format_list.pop_front();
     for (auto iter = reference_map.lower_bound(format->name());
          iter != reference_map.upper_bound(format->name()); iter++) {
@@ -547,10 +547,10 @@
   return bin_encoding_info;
 }
 
-void BinFormatVisitor::PreProcessDeclarations(DeclarationListCtx *ctx) {
-  std::vector<IncludeFileCtx *> include_files;
+void BinFormatVisitor::PreProcessDeclarations(DeclarationListCtx* ctx) {
+  std::vector<IncludeFileCtx*> include_files;
 
-  for (auto *declaration : ctx->declaration()) {
+  for (auto* declaration : ctx->declaration()) {
     context_file_map_.insert({declaration, current_file_index_});
     // Create map from format name to format ctx.
     if (declaration->format_def() != nullptr) {
@@ -589,7 +589,7 @@
     include_files.push_back(declaration->include_file());
   }
   // Create map from decoder name to decoder ctx.
-  for (auto *decoder_def : ctx->decoder_def()) {
+  for (auto* decoder_def : ctx->decoder_def()) {
     context_file_map_.insert({decoder_def, current_file_index_});
     auto name = decoder_def->name->getText();
     auto iter = decoder_decl_map_.find(name);
@@ -602,18 +602,18 @@
     }
     decoder_decl_map_.emplace(name, decoder_def);
   }
-  for (auto *include_file_ctx : include_files) {
+  for (auto* include_file_ctx : include_files) {
     VisitIncludeFile(include_file_ctx);
   }
 }
 
-void BinFormatVisitor::VisitIncludeFile(IncludeFileCtx *ctx) {
+void BinFormatVisitor::VisitIncludeFile(IncludeFileCtx* ctx) {
   // The literal includes the double quotes.
   std::string literal = ctx->STRING_LITERAL()->getText();
   // Remove the double quotes from the literal and construct the full file name.
   std::string file_name = literal.substr(1, literal.length() - 2);
   // Check for recursive include.
-  for (auto const &name : include_file_stack_) {
+  for (auto const& name : include_file_stack_) {
     if (name == file_name) {
       error_listener()->semanticError(
           ctx->start, absl::StrCat("Recursive include of '", file_name, "'"));
@@ -623,14 +623,14 @@
   ParseIncludeFile(ctx, file_name, include_dir_vec_);
 }
 
-void BinFormatVisitor::ParseIncludeFile(antlr4::ParserRuleContext *ctx,
-                                        const std::string &file_name,
-                                        std::vector<std::string> const &dirs) {
+void BinFormatVisitor::ParseIncludeFile(antlr4::ParserRuleContext* ctx,
+                                        const std::string& file_name,
+                                        std::vector<std::string> const& dirs) {
   std::fstream include_file;
   // Open include file.
   // Try each of the include file directories.
   std::string include_name;
-  for (auto const &dir : dirs) {
+  for (auto const& dir : dirs) {
     include_name = absl::StrCat(dir, "/", file_name);
     include_file.open(include_name, std::fstream::in);
     if (include_file.is_open()) break;
@@ -656,16 +656,16 @@
   error_listener()->set_file_name(file_name);
   file_names_.push_back(file_name);
   current_file_index_ = file_names_.size() - 1;
-  auto *include_parser = new BinFmtAntlrParserWrapper(&include_file);
+  auto* include_parser = new BinFmtAntlrParserWrapper(&include_file);
   // We need to save the parser state so it's available for analysis after
   // we are done with building the parse trees.
   antlr_parser_wrappers_.push_back(include_parser);
   // Add the error listener.
   include_parser->parser()->removeErrorListeners();
   include_parser->parser()->addErrorListener(error_listener());
-  auto *top_level = include_parser->parser()->top_level();
+  auto* top_level = include_parser->parser()->top_level();
   // Start parsing at the declaratition_list rule.
-  DeclarationListCtx *declaration_list = top_level->declaration_list();
+  DeclarationListCtx* declaration_list = top_level->declaration_list();
   include_file.close();
   if (error_listener()->syntax_error_count() > 0) {
     error_listener()->set_file_name(previous_file_name);
@@ -675,7 +675,7 @@
   include_file_stack_.push_back(file_name);
   PreProcessDeclarations(declaration_list);
   // See if there is a once declaration in the file.
-  OnceCtx *once_ctx = top_level->once();
+  OnceCtx* once_ctx = top_level->once();
   if (once_ctx != nullptr) {
     once_include_files_.insert(include_name);
   }
@@ -684,8 +684,8 @@
   current_file_index_ = previous_file_index_;
 }
 
-void BinFormatVisitor::VisitFormatDef(FormatDefCtx *ctx,
-                                      BinEncodingInfo *encoding_info) {
+void BinFormatVisitor::VisitFormatDef(FormatDefCtx* ctx,
+                                      BinEncodingInfo* encoding_info) {
   if (ctx == nullptr) return;
   // Get the format name and width.
   std::string format_name = ctx->IDENT()->getText();
@@ -703,10 +703,10 @@
                      "': must specify a width or inherited format"));
     return;
   }
-  absl::StatusOr<Format *> format_res;
+  absl::StatusOr<Format*> format_res;
   if (ctx->inherits_from() != nullptr) {
     std::string parent_name = ctx->inherits_from()->IDENT()->getText();
-    auto *parent_format = encoding_info->GetFormat(parent_name);
+    auto* parent_format = encoding_info->GetFormat(parent_name);
     if (parent_format == nullptr) {
       auto iter = format_decl_map_.find(parent_name);
       if (iter != format_decl_map_.end()) {
@@ -767,8 +767,8 @@
   }
 }
 
-void BinFormatVisitor::VisitFieldDef(FieldDefCtx *ctx, Format *format,
-                                     BinEncodingInfo *encoding_info) {
+void BinFormatVisitor::VisitFieldDef(FieldDefCtx* ctx, Format* format,
+                                     BinEncodingInfo* encoding_info) {
   if (ctx == nullptr) return;
 
   std::string field_name(ctx->field_name->getText());
@@ -804,7 +804,7 @@
   }
   std::string format_ref_name = ctx->format_name->getText();
   // Make sure that the referred to format is fully parsed.
-  auto *format_ref = encoding_info->GetFormat(format_ref_name);
+  auto* format_ref = encoding_info->GetFormat(format_ref_name);
   if (format_ref == nullptr) {
     auto iter = format_decl_map_.find(format_ref_name);
     if (iter != format_decl_map_.end()) {
@@ -823,7 +823,7 @@
                                   ctx->start);
 }
 
-void BinFormatVisitor::VisitOverlayDef(OverlayDefCtx *ctx, Format *format) {
+void BinFormatVisitor::VisitOverlayDef(OverlayDefCtx* ctx, Format* format) {
   if (ctx == nullptr) return;
 
   std::string name(ctx->IDENT()->getText());
@@ -843,9 +843,9 @@
                                    ctx->start, overlay_res.status().message());
     return;
   }
-  auto *overlay = overlay_res.value();
+  auto* overlay = overlay_res.value();
   int file_index = context_file_map_.at(ctx);
-  for (auto *bit_field : ctx->bit_field_list()->bit_field_spec()) {
+  for (auto* bit_field : ctx->bit_field_list()->bit_field_spec()) {
     context_file_map_.insert({bit_field, file_index});
     VisitOverlayBitField(bit_field, overlay);
   }
@@ -858,15 +858,15 @@
   }
 }
 
-void BinFormatVisitor::VisitOverlayBitField(BitFieldCtx *ctx,
-                                            Overlay *overlay) {
+void BinFormatVisitor::VisitOverlayBitField(BitFieldCtx* ctx,
+                                            Overlay* overlay) {
   if (ctx == nullptr) return;
 
   if (ctx->IDENT() != nullptr) {
     // This is a reference to a bit field in the format.
     if (ctx->bit_range_list() != nullptr) {
       std::vector<BitRange> bit_ranges_;
-      for (auto *range : ctx->bit_range_list()->bit_index_range()) {
+      for (auto* range : ctx->bit_range_list()->bit_index_range()) {
         bit_ranges_.push_back(GetBitIndexRange(range));
       }
       auto status = overlay->AddFieldReference(ctx->IDENT()->getText(),
@@ -887,7 +887,7 @@
   // Is this a reference to the format itself?
   if (ctx->bit_range_list() != nullptr) {
     std::vector<BitRange> bit_ranges_;
-    for (auto *range : ctx->bit_range_list()->bit_index_range()) {
+    for (auto* range : ctx->bit_range_list()->bit_index_range()) {
       bit_ranges_.push_back(GetBitIndexRange(range));
     }
     auto status = overlay->AddFormatReference(std::move(bit_ranges_));
@@ -903,8 +903,8 @@
   overlay->AddBitConstant(bin_num);
 }
 
-InstructionGroup *BinFormatVisitor::VisitInstructionGroupDef(
-    InstructionGroupDefCtx *ctx, BinEncodingInfo *encoding_info) {
+InstructionGroup* BinFormatVisitor::VisitInstructionGroupDef(
+    InstructionGroupDefCtx* ctx, BinEncodingInfo* encoding_info) {
   if (ctx == nullptr) return nullptr;
 
   // Create the named instruction group.
@@ -929,7 +929,7 @@
       return nullptr;
     } else {
       VisitFormatDef(iter->second, encoding_info);
-      auto *format = encoding_info->GetFormat(format_name);
+      auto* format = encoding_info->GetFormat(format_name);
       // Verify that the format width = declared width and also <= 64 bits wide.
       if (format->declared_width() != width) {
         error_listener_->semanticError(
@@ -958,9 +958,9 @@
       return nullptr;
     }
     // Parse the instruction encoding definitions in the instruction group.
-    auto *inst_group = inst_group_res.value();
+    auto* inst_group = inst_group_res.value();
     int file_index = context_file_map_.at(ctx);
-    for (auto *inst_def : ctx->instruction_def_list()->instruction_def()) {
+    for (auto* inst_def : ctx->instruction_def_list()->instruction_def()) {
       context_file_map_.insert({inst_def, file_index});
       VisitInstructionDef(inst_def, inst_group);
     }
@@ -974,8 +974,8 @@
                                        group_name_set, encoding_info);
 }
 
-void BinFormatVisitor::VisitInstructionDef(InstructionDefCtx *ctx,
-                                           InstructionGroup *inst_group) {
+void BinFormatVisitor::VisitInstructionDef(InstructionDefCtx* ctx,
+                                           InstructionGroup* inst_group) {
   if (ctx == nullptr) return;
   // If it is a generator, process it.
   if (ctx->generate != nullptr) {
@@ -1015,30 +1015,30 @@
             ") differs from the declared width of the instruction group (",
             inst_group->width(), ")"));
   }
-  auto *inst_encoding =
+  auto* inst_encoding =
       inst_group->AddInstructionEncoding(ctx->format_name, name, format);
   if (format == nullptr) return;
   // Add constraints to the instruction encoding.
-  for (auto *constraint : ctx->field_constraint_list()->field_constraint()) {
+  for (auto* constraint : ctx->field_constraint_list()->field_constraint()) {
     context_file_map_.insert({constraint, file_index});
     VisitConstraint(format, constraint, inst_encoding);
   }
 }
 
 void BinFormatVisitor::ProcessInstructionDefGenerator(
-    InstructionDefCtx *ctx, InstructionGroup *inst_group) {
+    InstructionDefCtx* ctx, InstructionGroup* inst_group) {
   if (ctx == nullptr) return;
   absl::flat_hash_set<std::string> range_variable_names;
-  std::vector<RangeAssignmentInfo *> range_info_vec;
+  std::vector<RangeAssignmentInfo*> range_info_vec;
   // Process range assignment lists. The range assignment is either a single
   // value or a structured binding assignment. If it's a binding assignment we
   // need to make sure each tuple has the same number of values as there are
   // idents to assign them to.
   int file_index = context_file_map_.at(ctx);
-  for (auto *assign_ctx : ctx->range_assignment()) {
-    auto *range_info = new RangeAssignmentInfo();
+  for (auto* assign_ctx : ctx->range_assignment()) {
+    auto* range_info = new RangeAssignmentInfo();
     range_info_vec.push_back(range_info);
-    for (auto *ident_ctx : assign_ctx->IDENT()) {
+    for (auto* ident_ctx : assign_ctx->IDENT()) {
       std::string name = ident_ctx->getText();
       if (range_variable_names.contains(name)) {
         error_listener()->semanticError(
@@ -1061,7 +1061,7 @@
     }
     // See if it's a list of simple values.
     if (!assign_ctx->gen_value().empty()) {
-      for (auto *gen_value_ctx : assign_ctx->gen_value()) {
+      for (auto* gen_value_ctx : assign_ctx->gen_value()) {
         if (gen_value_ctx->IDENT() != nullptr) {
           range_info->range_values[0].push_back(
               gen_value_ctx->IDENT()->getText());
@@ -1078,10 +1078,10 @@
       continue;
     }
     // It's a list of tuples with a structured binding assignment.
-    for (auto *tuple_ctx : assign_ctx->tuple()) {
+    for (auto* tuple_ctx : assign_ctx->tuple()) {
       if (tuple_ctx->gen_value().size() != range_info->range_names.size()) {
         // Clean up.
-        for (auto *info : range_info_vec) delete info;
+        for (auto* info : range_info_vec) delete info;
         error_listener_->semanticError(
             file_names_[file_index], assign_ctx->start,
             "Number of values differs from number of identifiers");
@@ -1123,7 +1123,7 @@
   }
   if (error_listener()->HasError()) {
     // Clean up.
-    for (auto *info : range_info_vec) delete info;
+    for (auto* info : range_info_vec) delete info;
     return;
   }
 
@@ -1132,23 +1132,23 @@
   std::string generated_text =
       GenerateInstructionDefList(range_info_vec, 0, input_text);
   // Parse and process the generated text.
-  auto *parser = new BinFmtAntlrParserWrapper(generated_text);
+  auto* parser = new BinFmtAntlrParserWrapper(generated_text);
   antlr_parser_wrappers_.push_back(parser);
   // Parse the text starting at the opcode_spec_list rule.
   auto instruction_defs =
       parser->parser()->instruction_def_list()->instruction_def();
   // Process the opcode spec.
-  for (auto *inst_def : instruction_defs) {
+  for (auto* inst_def : instruction_defs) {
     context_file_map_.insert({inst_def, file_index});
     VisitInstructionDef(inst_def, inst_group);
   }
   // Clean up.
-  for (auto *info : range_info_vec) delete info;
+  for (auto* info : range_info_vec) delete info;
 }
 
 std::string BinFormatVisitor::GenerateInstructionDefList(
-    const std::vector<RangeAssignmentInfo *> &range_info_vec, int index,
-    const std::string &template_str_in) const {
+    const std::vector<RangeAssignmentInfo*>& range_info_vec, int index,
+    const std::string& template_str_in) const {
   std::string generated;
   // Iterate for the number of values.
   for (int i = 0; i < range_info_vec[index]->range_values[0].size(); ++i) {
@@ -1158,7 +1158,7 @@
     // current set of values.
     int var_index = 0;
     int replace_count = 0;
-    for (auto &re : range_info_vec[index]->range_regexes) {
+    for (auto& re : range_info_vec[index]->range_regexes) {
       replace_count += RE2::GlobalReplace(
           &template_str, re,
           range_info_vec[index]->range_values[var_index++][i]);
@@ -1181,8 +1181,8 @@
   return generated;
 }
 
-void BinFormatVisitor::VisitConstraint(Format *format, FieldConstraintCtx *ctx,
-                                       InstructionEncoding *inst_encoding) {
+void BinFormatVisitor::VisitConstraint(Format* format, FieldConstraintCtx* ctx,
+                                       InstructionEncoding* inst_encoding) {
   if (ctx == nullptr) return;
   if (inst_encoding == nullptr) return;
 
@@ -1200,8 +1200,8 @@
     // field width.
     if (ctx->number()->BIN_NUMBER() != nullptr) {
       int length = ParseBinaryNum(ctx->number()->BIN_NUMBER()).width;
-      auto *field = format->GetField(field_name);
-      auto *overlay = format->GetOverlay(field_name);
+      auto* field = format->GetField(field_name);
+      auto* overlay = format->GetOverlay(field_name);
       if (field != nullptr) {
         if (field->width != length) {
           error_listener_->semanticWarning(
@@ -1234,14 +1234,14 @@
 }
 
 std::unique_ptr<BinEncodingInfo> BinFormatVisitor::VisitDecoderDef(
-    DecoderDefCtx *ctx) {
+    DecoderDefCtx* ctx) {
   if (ctx == nullptr) return nullptr;
   std::string name = ctx->name->getText();
 
   // First get the opcode enum.
   int opcode_count = 0;
   std::string opcode_enum;
-  for (auto *attr_ctx : ctx->decoder_attribute()) {
+  for (auto* attr_ctx : ctx->decoder_attribute()) {
     if (attr_ctx->opcode_enum_decl() != nullptr) {
       auto opcode_enum_literal =
           attr_ctx->opcode_enum_decl()->STRING_LITERAL()->getText();
@@ -1262,14 +1262,14 @@
   }
   auto encoding_info =
       std::make_unique<BinEncodingInfo>(opcode_enum, error_listener_.get());
-  auto *decoder = encoding_info->AddBinDecoder(name);
+  auto* decoder = encoding_info->AddBinDecoder(name);
   if (decoder == nullptr) return nullptr;
   absl::flat_hash_set<std::string> group_name_set;
   int namespace_count = 0;
-  for (auto *attr_ctx : ctx->decoder_attribute()) {
+  for (auto* attr_ctx : ctx->decoder_attribute()) {
     // Include files.
     if (attr_ctx->include_files() != nullptr) {
-      for (auto *include_file : attr_ctx->include_files()->include_file()) {
+      for (auto* include_file : attr_ctx->include_files()->include_file()) {
         auto include_text = include_file->STRING_LITERAL()->getText();
         encoding_info->AddIncludeFile(include_text);
       }
@@ -1278,7 +1278,7 @@
     // Namespace declaration.
     if (attr_ctx->namespace_decl() != nullptr) {
       auto decl = attr_ctx->namespace_decl();
-      for (auto *namespace_name : decl->namespace_ident()) {
+      for (auto* namespace_name : decl->namespace_ident()) {
         decoder->namespaces().push_back(namespace_name->getText());
       }
       if (namespace_count > 0) {
@@ -1304,7 +1304,7 @@
       }
 
       auto map_iter = encoding_info->instruction_group_map().find(group_name);
-      InstructionGroup *inst_group = nullptr;
+      InstructionGroup* inst_group = nullptr;
       if (map_iter != encoding_info->instruction_group_map().end()) {
         inst_group = map_iter->second;
       } else {
@@ -1338,7 +1338,7 @@
       auto file_index = context_file_map_.at(ctx);
       context_file_map_.insert(
           {attr_ctx->group_name()->group_name_list(), file_index});
-      auto *parent_group = VisitInstructionGroupNameList(
+      auto* parent_group = VisitInstructionGroupNameList(
           group_name, attr_ctx->group_name()->group_name_list(), group_name_set,
           encoding_info.get());
       if (parent_group == nullptr) {
@@ -1356,14 +1356,14 @@
   return encoding_info;
 }
 
-InstructionGroup *BinFormatVisitor::VisitInstructionGroupNameList(
-    const std::string &group_name, GroupNameListCtx *ctx,
-    absl::flat_hash_set<std::string> &group_name_set,
-    BinEncodingInfo *encoding_info) {
-  std::vector<InstructionGroup *> child_groups;
+InstructionGroup* BinFormatVisitor::VisitInstructionGroupNameList(
+    const std::string& group_name, GroupNameListCtx* ctx,
+    absl::flat_hash_set<std::string>& group_name_set,
+    BinEncodingInfo* encoding_info) {
+  std::vector<InstructionGroup*> child_groups;
   std::string group_format_name;
   // Iterate through the list of named "child" groups to combine.
-  for (auto *ident : ctx->IDENT()) {
+  for (auto* ident : ctx->IDENT()) {
     auto child_name = ident->getText();
     if (group_name_set.contains(child_name)) {
       error_listener_->semanticError(
@@ -1372,7 +1372,7 @@
                        "' - ignored"));
       continue;
     }
-    InstructionGroup *child_group = nullptr;
+    InstructionGroup* child_group = nullptr;
     auto map_iter = encoding_info->instruction_group_map().find(child_name);
     if (map_iter != encoding_info->instruction_group_map().end()) {
       child_group = map_iter->second;
@@ -1420,26 +1420,26 @@
     return nullptr;
   }
   auto parent_group = res.value();
-  for (auto *child_group : child_groups) {
-    for (auto *encoding : child_group->encoding_vec()) {
+  for (auto* child_group : child_groups) {
+    for (auto* encoding : child_group->encoding_vec()) {
       parent_group->AddInstructionEncoding(new InstructionEncoding(*encoding));
     }
   }
   return parent_group;
 }
 
-void BinFormatVisitor::ProcessSpecializations(BinEncodingInfo *encoding_info) {
-  for (auto *ctx : specializations_) {
+void BinFormatVisitor::ProcessSpecializations(BinEncodingInfo* encoding_info) {
+  for (auto* ctx : specializations_) {
     auto file_index = context_file_map_.at(ctx);
     std::string name = ctx->name->getText();
     std::string parent_name = ctx->parent->getText();
-    for (auto &[unused, grp_ptr] : encoding_info->instruction_group_map()) {
+    for (auto& [unused, grp_ptr] : encoding_info->instruction_group_map()) {
       auto iter = grp_ptr->encoding_name_map().find(parent_name);
       if (iter != grp_ptr->encoding_name_map().end()) {
-        auto *parent_encoding = iter->second;
-        auto *format = parent_encoding->format();
-        auto *inst_encoding = new InstructionEncoding(name, format);
-        for (auto *constraint :
+        auto* parent_encoding = iter->second;
+        auto* format = parent_encoding->format();
+        auto* inst_encoding = new InstructionEncoding(name, format);
+        for (auto* constraint :
              ctx->field_constraint_list()->field_constraint()) {
           context_file_map_.insert({constraint, file_index});
           VisitConstraint(format, constraint, inst_encoding);
diff --git a/mpact/sim/decoder/bin_format_visitor.h b/mpact/sim/decoder/bin_format_visitor.h
index b824b34..e1ba70f 100644
--- a/mpact/sim/decoder/bin_format_visitor.h
+++ b/mpact/sim/decoder/bin_format_visitor.h
@@ -88,72 +88,72 @@
 
   // Entry point for processing a source_stream input, generating any output
   // files in the given directory. Returns OK if no errors were encountered.
-  absl::Status Process(const std::vector<std::string> &file_names,
-                       const std::string &decoder_name,
+  absl::Status Process(const std::vector<std::string>& file_names,
+                       const std::string& decoder_name,
                        absl::string_view prefix,
-                       const std::vector<std::string> &include_roots,
+                       const std::vector<std::string>& include_roots,
                        absl::string_view directory);
 
  private:
   // Check the encodings to make sure there aren't any obvious errors.
-  void PerformEncodingChecks(BinEncodingInfo *encoding);
+  void PerformEncodingChecks(BinEncodingInfo* encoding);
   // Called to generate and emit code for the decoder according to the parsed
   // input file.
-  StringTriple EmitDecoderCode(BinEncodingInfo *encoding);
-  StringTriple EmitDecoderFilePrefix(const std::string &dot_h_name,
-                                     const std::string &types_dot_h_name,
-                                     BinEncodingInfo *encoding_info) const;
+  StringTriple EmitDecoderCode(BinEncodingInfo* encoding);
+  StringTriple EmitDecoderFilePrefix(const std::string& dot_h_name,
+                                     const std::string& types_dot_h_name,
+                                     BinEncodingInfo* encoding_info) const;
   // Called to generate and emit code for the decoder according to the parsed
   // input file.
   std::tuple<std::string, std::string> EmitEncoderCode(
-      BinEncodingInfo *encoding);
+      BinEncodingInfo* encoding);
   std::tuple<std::string, std::string> EmitEncoderFilePrefix(
-      const std::string &dot_h_name, const std::string &enum_h_name,
-      const std::string &types_dot_h_name,
-      BinEncodingInfo *encoding_info) const;
+      const std::string& dot_h_name, const std::string& enum_h_name,
+      const std::string& types_dot_h_name,
+      BinEncodingInfo* encoding_info) const;
   // Generate the file suffixes (namespace closing etc.)
-  StringTriple EmitFileSuffix(const std::string &dot_h_name,
-                              const std::string &types_dot_h_name,
-                              BinEncodingInfo *encoding_info);
+  StringTriple EmitFileSuffix(const std::string& dot_h_name,
+                              const std::string& types_dot_h_name,
+                              BinEncodingInfo* encoding_info);
   // Utility methods to parse certain nodes.
-  BinaryNum ParseBinaryNum(TerminalNode *node);
-  BitRange GetBitIndexRange(BitIndexRangeCtx *ctx);
-  int ConvertToInt(NumberCtx *ctx);
+  BinaryNum ParseBinaryNum(TerminalNode* node);
+  BitRange GetBitIndexRange(BitIndexRangeCtx* ctx);
+  int ConvertToInt(NumberCtx* ctx);
   // Methods that visit the nodes of the parse tree.
   std::unique_ptr<BinEncodingInfo> ProcessTopLevel(
-      const std::string &decoder_name);
-  void PreProcessDeclarations(DeclarationListCtx *ctx);
-  void VisitDeclarations(DeclarationListCtx *ctx,
-                         BinEncodingInfo *encoding_info);
-  void VisitFormatDef(FormatDefCtx *ctx, BinEncodingInfo *encoding_info);
-  void VisitFieldDef(FieldDefCtx *ctx, Format *format,
-                     BinEncodingInfo *encoding_info);
-  void VisitIncludeFile(IncludeFileCtx *ctx);
-  void ParseIncludeFile(antlr4::ParserRuleContext *ctx,
-                        const std::string &file_name,
-                        const std::vector<std::string> &dirs);
-  void VisitOverlayDef(OverlayDefCtx *ctx, Format *format);
-  void VisitOverlayBitField(BitFieldCtx *ctx, Overlay *overlay);
-  InstructionGroup *VisitInstructionGroupDef(InstructionGroupDefCtx *ctx,
-                                             BinEncodingInfo *encoding_info);
-  std::unique_ptr<BinEncodingInfo> VisitDecoderDef(DecoderDefCtx *ctx);
-  void VisitInstructionDef(InstructionDefCtx *ctx,
-                           InstructionGroup *inst_group);
-  void ProcessInstructionDefGenerator(InstructionDefCtx *ctx,
-                                      InstructionGroup *inst_group);
+      const std::string& decoder_name);
+  void PreProcessDeclarations(DeclarationListCtx* ctx);
+  void VisitDeclarations(DeclarationListCtx* ctx,
+                         BinEncodingInfo* encoding_info);
+  void VisitFormatDef(FormatDefCtx* ctx, BinEncodingInfo* encoding_info);
+  void VisitFieldDef(FieldDefCtx* ctx, Format* format,
+                     BinEncodingInfo* encoding_info);
+  void VisitIncludeFile(IncludeFileCtx* ctx);
+  void ParseIncludeFile(antlr4::ParserRuleContext* ctx,
+                        const std::string& file_name,
+                        const std::vector<std::string>& dirs);
+  void VisitOverlayDef(OverlayDefCtx* ctx, Format* format);
+  void VisitOverlayBitField(BitFieldCtx* ctx, Overlay* overlay);
+  InstructionGroup* VisitInstructionGroupDef(InstructionGroupDefCtx* ctx,
+                                             BinEncodingInfo* encoding_info);
+  std::unique_ptr<BinEncodingInfo> VisitDecoderDef(DecoderDefCtx* ctx);
+  void VisitInstructionDef(InstructionDefCtx* ctx,
+                           InstructionGroup* inst_group);
+  void ProcessInstructionDefGenerator(InstructionDefCtx* ctx,
+                                      InstructionGroup* inst_group);
   std::string GenerateInstructionDefList(
-      const std::vector<RangeAssignmentInfo *> &range_info_vec, int index,
-      const std::string &template_str_in) const;
-  void VisitConstraint(Format *format, FieldConstraintCtx *ctx,
-                       InstructionEncoding *inst_encoding);
-  InstructionGroup *VisitInstructionGroupNameList(
-      const std::string &group_name, GroupNameListCtx *ctx,
-      absl::flat_hash_set<std::string> &group_name_set,
-      BinEncodingInfo *encoding_info);
-  void ProcessSpecializations(BinEncodingInfo *encoding_info);
+      const std::vector<RangeAssignmentInfo*>& range_info_vec, int index,
+      const std::string& template_str_in) const;
+  void VisitConstraint(Format* format, FieldConstraintCtx* ctx,
+                       InstructionEncoding* inst_encoding);
+  InstructionGroup* VisitInstructionGroupNameList(
+      const std::string& group_name, GroupNameListCtx* ctx,
+      absl::flat_hash_set<std::string>& group_name_set,
+      BinEncodingInfo* encoding_info);
+  void ProcessSpecializations(BinEncodingInfo* encoding_info);
 
   // Accessors.
-  decoder::DecoderErrorListener *error_listener() const {
+  decoder::DecoderErrorListener* error_listener() const {
     return error_listener_.get();
   }
   void set_error_listener(
@@ -165,7 +165,7 @@
   // Vector of file names.
   std::vector<std::string> file_names_;
   // Map from context pointer to file index.
-  absl::flat_hash_map<const antlr4::ParserRuleContext *, int> context_file_map_;
+  absl::flat_hash_map<const antlr4::ParserRuleContext*, int> context_file_map_;
   // This stores a vector of include file root directories.
   std::vector<std::string> include_dir_vec_;
   // Keep track of files that are included in case there is recursive includes.
@@ -174,17 +174,17 @@
   std::unique_ptr<decoder::DecoderErrorListener> error_listener_ = nullptr;
   std::string decoder_name_;
   // Maps from identifiers to declaration contexts.
-  absl::flat_hash_map<std::string, FormatDefCtx *> format_decl_map_;
-  absl::flat_hash_map<std::string, InstructionGroupDefCtx *> group_decl_map_;
-  absl::flat_hash_map<std::string, DecoderDefCtx *> decoder_decl_map_;
+  absl::flat_hash_map<std::string, FormatDefCtx*> format_decl_map_;
+  absl::flat_hash_map<std::string, InstructionGroupDefCtx*> group_decl_map_;
+  absl::flat_hash_map<std::string, DecoderDefCtx*> decoder_decl_map_;
   // AntlrParserWrapper vector.
-  std::vector<BinFmtAntlrParserWrapper *> antlr_parser_wrappers_;
+  std::vector<BinFmtAntlrParserWrapper*> antlr_parser_wrappers_;
   // Map from comparator string to constraint type.
   absl::flat_hash_map<std::string, ConstraintType> constraint_string_to_type_;
   // Set of include files marked as once.
   absl::flat_hash_set<std::string> once_include_files_;
   // Specializations to process after all instructions have been processed.
-  std::vector<InstructionDefCtx *> specializations_;
+  std::vector<InstructionDefCtx*> specializations_;
 };
 
 }  // namespace bin_format
diff --git a/mpact/sim/decoder/bundle.cc b/mpact/sim/decoder/bundle.cc
index 5d7f484..dc6ef5d 100644
--- a/mpact/sim/decoder/bundle.cc
+++ b/mpact/sim/decoder/bundle.cc
@@ -29,8 +29,8 @@
 namespace machine_description {
 namespace instruction_set {
 
-Bundle::Bundle(absl::string_view name, InstructionSet *instruction_set,
-               BundleDeclCtx *ctx)
+Bundle::Bundle(absl::string_view name, InstructionSet* instruction_set,
+               BundleDeclCtx* ctx)
     : ctx_(ctx),
       instruction_set_(instruction_set),
       name_(name),
@@ -42,7 +42,7 @@
 }
 
 void Bundle::AppendSlot(absl::string_view name,
-                        const std::vector<int> &instance_vec) {
+                        const std::vector<int>& instance_vec) {
   slot_uses_.push_back({std::string(name), instance_vec});
 }
 
@@ -64,21 +64,21 @@
                   " *encoding);\n"
                   "  virtual SemFunc GetSemanticFunction() = 0;\n"
                   "\n");
-  for (const auto &bundle_name : bundle_names()) {
+  for (const auto& bundle_name : bundle_names()) {
     absl::StrAppend(&output, "  ", ToPascalCase(bundle_name), "Decoder *",
                     bundle_name, "_decoder() { return ", bundle_name,
                     "_decoder_.get(); }\n");
   }
-  for (const auto &[slot_name, unused] : slot_uses()) {
+  for (const auto& [slot_name, unused] : slot_uses()) {
     absl::StrAppend(&output, "  ", ToPascalCase(slot_name), "Slot *", slot_name,
                     "_decoder() { return ", slot_name, "_decoder_.get(); }\n");
   }
   absl::StrAppend(&output, " private:\n");
-  for (const auto &bundle_name : bundle_names()) {
+  for (const auto& bundle_name : bundle_names()) {
     absl::StrAppend(&output, "  std::unique_ptr<", ToPascalCase(bundle_name),
                     "Decoder> ", bundle_name, "_decoder_;\n");
   }
-  for (const auto &[slot_name, unused] : slot_uses()) {
+  for (const auto& [slot_name, unused] : slot_uses()) {
     absl::StrAppend(&output, "  std::unique_ptr<", ToPascalCase(slot_name),
                     "Slot> ", slot_name, "_decoder_;\n");
   }
@@ -100,11 +100,11 @@
                   "  arch_state_(arch_state)\n"
                   "{\n");
 
-  for (const auto &bundle_name : bundle_names()) {
+  for (const auto& bundle_name : bundle_names()) {
     absl::StrAppend(&output, "  ", bundle_name, "_decoder = std::make_unique<",
                     ToPascalCase(bundle_name), "Decoder>(arch_state_);\n");
   }
-  for (const auto &[slot_name, unused] : slot_uses()) {
+  for (const auto& [slot_name, unused] : slot_uses()) {
     absl::StrAppend(&output, "  ", slot_name, "_decoder = std::make_unique<",
                     ToPascalCase(slot_name), "Slot>(arch_state_);\n");
   }
@@ -117,13 +117,13 @@
       "  Instruction *inst = new Instruction(address, arch_state_);\n"
       "  Instruction *tmp_inst;\n");
   // Decoded bundles are added to the child list.
-  for (const auto &bundle_name : bundle_names()) {
+  for (const auto& bundle_name : bundle_names()) {
     absl::StrAppend(&output, "  tmp_inst = ", bundle_name,
                     "_decoder_->Decode(address, encoding);\n"
                     "  inst->AppendChild(tmp_inst);\n");
   }
   // Instructions for decoded slots are added to the "next" list.
-  for (const auto &[slot_name, instance_vec] : slot_uses()) {
+  for (const auto& [slot_name, instance_vec] : slot_uses()) {
     if (instance_vec.empty()) {
       absl::StrAppend(&output, "  tmp_inst = ", slot_name,
                       "_decoder_->Decode(address, encoding, 0);\n"
diff --git a/mpact/sim/decoder/bundle.h b/mpact/sim/decoder/bundle.h
index 315cd42..2d8158d 100644
--- a/mpact/sim/decoder/bundle.h
+++ b/mpact/sim/decoder/bundle.h
@@ -38,15 +38,15 @@
 class Bundle {
  public:
   // Constructor and destructor.
-  Bundle(absl::string_view name, InstructionSet *instruction_set,
-         BundleDeclCtx *ctx);
+  Bundle(absl::string_view name, InstructionSet* instruction_set,
+         BundleDeclCtx* ctx);
   virtual ~Bundle() = default;
 
   // Append a slot to the bundle. In case the slot has multiple instances,
   // a non-empty vector of instance numbers specify which slot instances are
   // part of this bundle.
   void AppendSlot(absl::string_view slot_name,
-                  const std::vector<int> &instance_vec);
+                  const std::vector<int>& instance_vec);
   // Append a sub bundle to this bundle.
   void AppendBundleName(absl::string_view bundle_name);
   // Return string for  bundle class declaration.
@@ -55,15 +55,15 @@
   std::string GenerateClassDefinition(absl::string_view encoding_type) const;
 
   // Getters and setters.
-  const BundleDeclCtx *ctx() const { return ctx_; }
-  const std::string &name() const { return name_; }
-  const std::string &pascal_name() const { return pascal_name_; }
-  const std::vector<std::pair<std::string, const std::vector<int>>> &slot_uses()
+  const BundleDeclCtx* ctx() const { return ctx_; }
+  const std::string& name() const { return name_; }
+  const std::string& pascal_name() const { return pascal_name_; }
+  const std::vector<std::pair<std::string, const std::vector<int>>>& slot_uses()
       const {
     return slot_uses_;
   }
-  const std::vector<std::string> &bundle_names() const { return bundle_names_; }
-  InstructionSet *instruction_set() const { return instruction_set_; }
+  const std::vector<std::string>& bundle_names() const { return bundle_names_; }
+  InstructionSet* instruction_set() const { return instruction_set_; }
   bool is_marked() const { return is_marked_; }
   void set_is_marked(bool value) { is_marked_ = value; }
   std::string semfunc_code_string() const { return semfunc_code_string_; }
@@ -72,11 +72,11 @@
   }
 
  private:
-  BundleDeclCtx *ctx_;
+  BundleDeclCtx* ctx_;
   // The is_marked flag is used to ensure bundle classes are only added once.
   bool is_marked_ = false;
   // Parent instruction set.
-  InstructionSet *instruction_set_;
+  InstructionSet* instruction_set_;
   std::string name_;
   // Name in PascalCase.
   std::string pascal_name_;
diff --git a/mpact/sim/decoder/decoder_error_listener.cc b/mpact/sim/decoder/decoder_error_listener.cc
index 10335b3..1f4ece4 100644
--- a/mpact/sim/decoder/decoder_error_listener.cc
+++ b/mpact/sim/decoder/decoder_error_listener.cc
@@ -27,18 +27,18 @@
 namespace decoder {
 
 // Error listener methods.
-void DecoderErrorListener::semanticError(antlr4::Token *token,
+void DecoderErrorListener::semanticError(antlr4::Token* token,
                                          absl::string_view msg) {
   semanticError(file_name_, token, msg);
 }
 
-void DecoderErrorListener::semanticWarning(antlr4::Token *token,
+void DecoderErrorListener::semanticWarning(antlr4::Token* token,
                                            absl::string_view msg) {
   semanticWarning(file_name_, token, msg);
 }
 
-void DecoderErrorListener::semanticError(const std::string &file_name,
-                                         antlr4::Token *token,
+void DecoderErrorListener::semanticError(const std::string& file_name,
+                                         antlr4::Token* token,
                                          absl::string_view msg) {
   if (token != nullptr) {
     size_t line = token->getLine();
@@ -51,8 +51,8 @@
   semantic_error_count_++;
 }
 
-void DecoderErrorListener::semanticWarning(const std::string &file_name,
-                                           antlr4::Token *token,
+void DecoderErrorListener::semanticWarning(const std::string& file_name,
+                                           antlr4::Token* token,
                                            absl::string_view msg) {
   if (token != nullptr) {
     size_t line = token->getLine();
@@ -65,35 +65,35 @@
   semantic_warning_count_++;
 }
 
-void DecoderErrorListener::syntaxError(antlr4::Recognizer *recognizer,
-                                       antlr4::Token *offendingSymbol,
+void DecoderErrorListener::syntaxError(antlr4::Recognizer* recognizer,
+                                       antlr4::Token* offendingSymbol,
                                        size_t line, size_t charPositionInLine,
-                                       const std::string &msg,
+                                       const std::string& msg,
                                        std::exception_ptr e) {
   LOG(ERROR) << absl::StrCat(file_name_, ":", line, ":", charPositionInLine,
                              "\n  ", msg, "\n");
   syntax_error_count_++;
 }
 
-void DecoderErrorListener::reportAmbiguity(antlr4::Parser *recognizer,
-                                           const antlr4::dfa::DFA &dfa,
+void DecoderErrorListener::reportAmbiguity(antlr4::Parser* recognizer,
+                                           const antlr4::dfa::DFA& dfa,
                                            size_t startIndex, size_t stopIndex,
                                            bool exact,
-                                           const antlrcpp::BitSet &ambigAlts,
-                                           antlr4::atn::ATNConfigSet *configs) {
+                                           const antlrcpp::BitSet& ambigAlts,
+                                           antlr4::atn::ATNConfigSet* configs) {
   // Empty.
 }
 
 void DecoderErrorListener::reportAttemptingFullContext(
-    antlr4::Parser *recognizer, const antlr4::dfa::DFA &dfa, size_t startIndex,
-    size_t stopIndex, const antlrcpp::BitSet &conflictingAlts,
-    antlr4::atn::ATNConfigSet *configs) {
+    antlr4::Parser* recognizer, const antlr4::dfa::DFA& dfa, size_t startIndex,
+    size_t stopIndex, const antlrcpp::BitSet& conflictingAlts,
+    antlr4::atn::ATNConfigSet* configs) {
   // Empty.
 }
 
 void DecoderErrorListener::reportContextSensitivity(
-    antlr4::Parser *recognizer, const antlr4::dfa::DFA &dfa, size_t startIndex,
-    size_t stopIndex, size_t prediction, antlr4::atn::ATNConfigSet *configs) {
+    antlr4::Parser* recognizer, const antlr4::dfa::DFA& dfa, size_t startIndex,
+    size_t stopIndex, size_t prediction, antlr4::atn::ATNConfigSet* configs) {
   // Empty.
 }
 
diff --git a/mpact/sim/decoder/decoder_error_listener.h b/mpact/sim/decoder/decoder_error_listener.h
index 77eb3d8..004e46b 100644
--- a/mpact/sim/decoder/decoder_error_listener.h
+++ b/mpact/sim/decoder/decoder_error_listener.h
@@ -32,29 +32,29 @@
 // An Antlr4 error listener to check for syntax errors.
 class DecoderErrorListener : public antlr4::BaseErrorListener {
  public:
-  void semanticError(antlr4::Token *token, absl::string_view msg);
-  void semanticWarning(antlr4::Token *token, absl::string_view msg);
-  void semanticError(const std::string &file_name, antlr4::Token *token,
+  void semanticError(antlr4::Token* token, absl::string_view msg);
+  void semanticWarning(antlr4::Token* token, absl::string_view msg);
+  void semanticError(const std::string& file_name, antlr4::Token* token,
                      absl::string_view msg);
-  void semanticWarning(const std::string &file_name, antlr4::Token *token,
+  void semanticWarning(const std::string& file_name, antlr4::Token* token,
                        absl::string_view msg);
-  void syntaxError(antlr4::Recognizer *recognizer,
-                   antlr4::Token *offendingSymbol, size_t line,
-                   size_t charPositionInLine, const std::string &msg,
+  void syntaxError(antlr4::Recognizer* recognizer,
+                   antlr4::Token* offendingSymbol, size_t line,
+                   size_t charPositionInLine, const std::string& msg,
                    std::exception_ptr e) override;
-  void reportAmbiguity(antlr4::Parser *recognizer, const antlr4::dfa::DFA &dfa,
+  void reportAmbiguity(antlr4::Parser* recognizer, const antlr4::dfa::DFA& dfa,
                        size_t startIndex, size_t stopIndex, bool exact,
-                       const antlrcpp::BitSet &ambigAlts,
-                       antlr4::atn::ATNConfigSet *configs) override;
-  void reportAttemptingFullContext(antlr4::Parser *recognizer,
-                                   const antlr4::dfa::DFA &dfa,
+                       const antlrcpp::BitSet& ambigAlts,
+                       antlr4::atn::ATNConfigSet* configs) override;
+  void reportAttemptingFullContext(antlr4::Parser* recognizer,
+                                   const antlr4::dfa::DFA& dfa,
                                    size_t startIndex, size_t stopIndex,
-                                   const antlrcpp::BitSet &conflictingAlts,
-                                   antlr4::atn::ATNConfigSet *configs) override;
-  void reportContextSensitivity(antlr4::Parser *recognizer,
-                                const antlr4::dfa::DFA &dfa, size_t startIndex,
+                                   const antlrcpp::BitSet& conflictingAlts,
+                                   antlr4::atn::ATNConfigSet* configs) override;
+  void reportContextSensitivity(antlr4::Parser* recognizer,
+                                const antlr4::dfa::DFA& dfa, size_t startIndex,
                                 size_t stopIndex, size_t prediction,
-                                antlr4::atn::ATNConfigSet *configs) override;
+                                antlr4::atn::ATNConfigSet* configs) override;
 
   bool HasError() const {
     return (syntax_error_count_ + semantic_error_count_) > 0;
@@ -63,7 +63,7 @@
   int syntax_error_count() const { return syntax_error_count_; }
   int semantic_error_count() const { return semantic_error_count_; }
   // Current active file.
-  const std::string &file_name() const { return file_name_; }
+  const std::string& file_name() const { return file_name_; }
   void set_file_name(std::string file_name) {
     file_name_ = std::move(file_name);
   }
diff --git a/mpact/sim/decoder/decoder_gen_main.cc b/mpact/sim/decoder/decoder_gen_main.cc
index 20cedba..4c28d3f 100644
--- a/mpact/sim/decoder/decoder_gen_main.cc
+++ b/mpact/sim/decoder/decoder_gen_main.cc
@@ -54,7 +54,7 @@
 ABSL_FLAG(std::string, isa_name, "", "isa name");
 ABSL_FLAG(std::string, include, "", "include file directories");
 
-int main(int argc, char **argv) {
+int main(int argc, char** argv) {
   auto arg_vec = absl::ParseCommandLine(argc, argv);
 
   std::vector<std::string> file_names;
diff --git a/mpact/sim/decoder/encoding_group.cc b/mpact/sim/decoder/encoding_group.cc
index f722d84..33cd871 100644
--- a/mpact/sim/decoder/encoding_group.cc
+++ b/mpact/sim/decoder/encoding_group.cc
@@ -41,7 +41,7 @@
 using machine_description::instruction_set::ToPascalCase;
 
 // Indexed by the members of the ConstraintType enum in instruction_encoding.h.
-const char *kComparison[] = {
+const char* kComparison[] = {
     /* kEq */ "==",
     /* kNe */ "!=",
     /* kLt */ "<",
@@ -52,22 +52,22 @@
 
 // Helper function to provide a less than comparison of instruction encodings.
 // This is used in call to std::sort.
-static bool EncodingLess(uint64_t mask, InstructionEncoding *lhs,
-                         InstructionEncoding *rhs) {
+static bool EncodingLess(uint64_t mask, InstructionEncoding* lhs,
+                         InstructionEncoding* rhs) {
   uint64_t lhs_val = lhs->GetValue() & mask;
   uint64_t rhs_val = rhs->GetValue() & mask;
   return lhs_val < rhs_val;
 }
 
-EncodingGroup::EncodingGroup(InstructionGroup *inst_group, uint64_t ignore)
+EncodingGroup::EncodingGroup(InstructionGroup* inst_group, uint64_t ignore)
     : EncodingGroup(nullptr, inst_group, ignore) {}
 
-EncodingGroup::EncodingGroup(EncodingGroup *parent,
-                             InstructionGroup *inst_group, uint64_t ignore)
+EncodingGroup::EncodingGroup(EncodingGroup* parent,
+                             InstructionGroup* inst_group, uint64_t ignore)
     : inst_group_(inst_group), parent_(parent), ignore_(ignore) {}
 
 EncodingGroup::~EncodingGroup() {
-  for (auto *group : encoding_group_vec_) {
+  for (auto* group : encoding_group_vec_) {
     delete group;
   }
   encoding_group_vec_.clear();
@@ -87,7 +87,7 @@
 }
 
 // Adds an instruction encoding to the encoding group.
-void EncodingGroup::AddEncoding(InstructionEncoding *enc) {
+void EncodingGroup::AddEncoding(InstructionEncoding* enc) {
   if (encoding_vec_.empty()) {
     last_value_ = enc->GetValue();
     mask_ = enc->GetMask();
@@ -104,7 +104,7 @@
 // Returns true if there is overlap between the encoding and those already
 // in the group. Returns false if it would clear the mask of common "fixed"
 // bits.
-bool EncodingGroup::CanAddEncoding(InstructionEncoding *enc) {
+bool EncodingGroup::CanAddEncoding(InstructionEncoding* enc) {
   if (encoding_vec_.empty()) return true;
   uint64_t new_mask = mask_ & enc->GetMask();
   if (new_mask == 0) return false;
@@ -115,7 +115,7 @@
 // opposed to a function that performs comparisons.
 bool EncodingGroup::IsSimpleDecode() {
   if (!encoding_group_vec().empty()) return false;
-  for (auto *enc : encoding_vec_) {
+  for (auto* enc : encoding_vec_) {
     if (!enc->other_constraints().empty()) return false;
     if (!enc->equal_extracted_constraints().empty()) return false;
     if (!enc->HasSpecialization()) return false;
@@ -150,9 +150,9 @@
   // Iterate across the possible values of the compressed varying bits.
   for (int i = 0; i < (1 << absl::popcount(discriminator_)); i++) {
     // Create a new group for the current value 'i'.
-    auto *encoding_group = new EncodingGroup(
+    auto* encoding_group = new EncodingGroup(
         this, inst_group_, ignore_ | constant_ | discriminator_);
-    for (auto *enc : encoding_vec_) {
+    for (auto* enc : encoding_vec_) {
       // Add all encodings that have value 'i' for the varying bits.
       if (ExtractValue(enc->GetValue(), recipe) != static_cast<unsigned>(i))
         continue;
@@ -181,11 +181,11 @@
       // But undo it if the max number of "varying" bits across the groups
       // is less than 2.
       int max = 0;
-      for (auto *group : encoding_group->encoding_group_vec_) {
+      for (auto* group : encoding_group->encoding_group_vec_) {
         max = std::max(max, absl::popcount(group->varying()));
       }
       if (max < 2) {
-        for (auto *group : encoding_group->encoding_group_vec_) {
+        for (auto* group : encoding_group->encoding_group_vec_) {
           delete group;
         }
         encoding_group->encoding_group_vec_.clear();
@@ -222,8 +222,8 @@
     // The encodings are in order of discriminator value, so checking for
     // duplicates are easy.
     int prev_value = -1;
-    InstructionEncoding *prev_enc = nullptr;
-    for (auto *enc : encoding_vec_) {
+    InstructionEncoding* prev_enc = nullptr;
+    for (auto* enc : encoding_vec_) {
       int value = ExtractValue(enc->GetValue(), discriminator_recipe_);
       if (value == prev_value) {
         inst_group_->encoding_info()->error_listener()->semanticError(
@@ -235,7 +235,7 @@
       prev_value = value;
     }
   }
-  for (auto const *enc_grp : encoding_group_vec_) {
+  for (auto const* enc_grp : encoding_group_vec_) {
     enc_grp->CheckEncodings();
   }
 }
@@ -243,8 +243,8 @@
 // Emit the initializers of the decode function tables/opcode tables used
 // by the decoding functions.
 void EncodingGroup::EmitInitializers(absl::string_view name,
-                                     std::string *initializers_ptr,
-                                     const std::string &opcode_enum) const {
+                                     std::string* initializers_ptr,
+                                     const std::string& opcode_enum) const {
   if (discriminator_size_ == 0) return;
   absl::StrAppend(initializers_ptr, "constexpr int kParseGroup", name,
                   "_Size = ", discriminator_size_, ";\n\n");
@@ -283,7 +283,7 @@
     }
   }
   absl::StrAppend(initializers_ptr, "};\n\n");
-  for (auto const *enc_grp : encoding_group_vec_) {
+  for (auto const* enc_grp : encoding_group_vec_) {
     // Don't create initializers for leaf encoding groups. They don't need them.
     if (enc_grp->encoding_group_vec_.empty()) continue;
     std::string grp_name = absl::StrCat(
@@ -297,9 +297,9 @@
 // Generate the code for the decoders, both the declarations in the .h file as
 // well as the definitions in the .cc file.
 void EncodingGroup::EmitDecoders(absl::string_view name,
-                                 std::string *declarations_ptr,
-                                 std::string *definitions_ptr,
-                                 const std::string &opcode_enum) const {
+                                 std::string* declarations_ptr,
+                                 std::string* definitions_ptr,
+                                 const std::string& opcode_enum) const {
   // Generate the decode function signature.
   std::string signature =
       absl::StrCat("std::pair<", opcode_enum, ", FormatEnum> Decode", name, "(",
@@ -352,7 +352,7 @@
                         opcode_enum, ", FormatEnum> opcodes[", count,
                         "] = {\n");
         int entry = 0;
-        for (auto *enc : encoding_vec_) {
+        for (auto* enc : encoding_vec_) {
           int value = ExtractValue(enc->GetValue(), discriminator_recipe_);
           while (entry < value) {
             absl::StrAppend(definitions_ptr, "    {", opcode_enum,
@@ -387,7 +387,7 @@
 
   if (encoding_group_vec_.empty()) return;
 
-  for (auto const *enc_grp : encoding_group_vec_) {
+  for (auto const* enc_grp : encoding_group_vec_) {
     uint64_t value = ExtractValue(enc_grp->encoding_vec_[0]->GetValue(),
                                   discriminator_recipe_);
     std::string grp_name = absl::StrCat(name, "_", absl::Hex(value));
@@ -397,7 +397,7 @@
 }
 
 void EncodingGroup::EmitComplexDecoderBody(
-    std::string *definitions_ptr, absl::string_view index_extraction,
+    std::string* definitions_ptr, absl::string_view index_extraction,
     absl::string_view opcode_enum) const {
   // If the index_extraction is empty, use a series of if statements.
   if (index_extraction.empty()) {
@@ -405,8 +405,8 @@
     return;
   }
   // Group the encodings by index value.
-  absl::btree_map<uint64_t, std::vector<InstructionEncoding *>> encoding_map;
-  for (auto *encoding : encoding_vec_) {
+  absl::btree_map<uint64_t, std::vector<InstructionEncoding*>> encoding_map;
+  for (auto* encoding : encoding_vec_) {
     // Get the discriminator value.
     uint64_t index_value =
         ExtractValue(encoding->GetValue(), discriminator_recipe_);
@@ -414,13 +414,13 @@
   }
   absl::StrAppend(definitions_ptr, "  switch (index) {\n");
   // For each index value, generate the 'case' statement.
-  for (auto &[index_value, encodings] : encoding_map) {
+  for (auto& [index_value, encodings] : encoding_map) {
     absl::flat_hash_set<std::string> extracted;
     absl::StrAppend(definitions_ptr, "    case 0x", absl::Hex(index_value),
                     ": {\n");
     int if_count = 0;
-    for (auto *encoding : encodings) {
-      for (auto *constraint : encoding->equal_constraints()) {
+    for (auto* encoding : encodings) {
+      for (auto* constraint : encoding->equal_constraints()) {
         ProcessConstraint(extracted, constraint, definitions_ptr);
       }
       if_count += EmitEncodingIfStatement(/*indent*/ 4, encoding, opcode_enum,
@@ -435,15 +435,15 @@
 }
 
 void EncodingGroup::EmitComplexDecoderBodyIfSequence(
-    std::string *definitions_ptr, absl::string_view opcode_enum) const {
+    std::string* definitions_ptr, absl::string_view opcode_enum) const {
   // For each instruction in the encoding vec, generate the if statement
   // to see if the instruction is matched.
   absl::flat_hash_set<std::string> extracted;
   int count = 0;
   // For equal constraints, some can be ignored because those bits are
   // wholly considered by the parent groups or the discriminator.
-  for (auto *encoding : encoding_vec_) {
-    for (auto *constraint : encoding->equal_constraints()) {
+  for (auto* encoding : encoding_vec_) {
+    for (auto* constraint : encoding->equal_constraints()) {
       ProcessConstraint(extracted, constraint, definitions_ptr);
     }
     count += EmitEncodingIfStatement(/*indent*/ 0, encoding, opcode_enum,
@@ -456,11 +456,11 @@
 }
 
 void EncodingGroup::ProcessConstraint(
-    const absl::flat_hash_set<std::string> &extracted, Constraint *constraint,
-    std::string *definitions_ptr) const {
+    const absl::flat_hash_set<std::string>& extracted, Constraint* constraint,
+    std::string* definitions_ptr) const {
   if (constraint->field != nullptr) {
     // Field constraint.
-    Field *field = constraint->field;
+    Field* field = constraint->field;
     std::string name = absl::StrCat(field->name, "_value");
     if (extracted.contains(name)) return;
     uint64_t mask = ((1ULL << field->width) - 1);
@@ -474,7 +474,7 @@
   }
 
   // It's an overlay constraint.
-  Overlay *overlay = constraint->overlay;
+  Overlay* overlay = constraint->overlay;
   std::string name = absl::StrCat(overlay->name(), "_value");
   uint64_t mask = 0;
   // Get the bits that correspond to the overlay.
@@ -496,9 +496,9 @@
 }
 
 int EncodingGroup::EmitEncodingIfStatement(
-    int indent, const InstructionEncoding *encoding,
-    absl::string_view opcode_enum, absl::flat_hash_set<std::string> &extracted,
-    std::string *definitions_ptr) const {
+    int indent, const InstructionEncoding* encoding,
+    absl::string_view opcode_enum, absl::flat_hash_set<std::string>& extracted,
+    std::string* definitions_ptr) const {
   std::string indent_str(indent + 2, ' ');
   // Write any field/overlay extractions needed for the encoding (that
   // haven't already been extracted).
@@ -510,7 +510,7 @@
                   definitions_ptr);
   // Write any field/overlay extractions needed for the specializations (that
   // haven't already been extracted).
-  for (auto const &[unused, encoding] : encoding->specializations()) {
+  for (auto const& [unused, encoding] : encoding->specializations()) {
     EmitExtractions(indent, encoding->equal_constraints(), extracted,
                     definitions_ptr);
     EmitExtractions(indent, encoding->equal_extracted_constraints(), extracted,
@@ -546,7 +546,7 @@
   // specialization.
   std::string if_str = "if ";
   if (specialization) {
-    for (auto const &[name, encoding] : encoding->specializations()) {
+    for (auto const& [name, encoding] : encoding->specializations()) {
       int spec_count = 0;
       std::string spec_condition;
       std::string spec_connector;
@@ -590,9 +590,9 @@
 }
 
 void EncodingGroup::EmitFieldExtraction(
-    const Field *field, const std::string &indent_str,
-    absl::flat_hash_set<std::string> &extracted,
-    std::string *definitions_ptr) const {
+    const Field* field, const std::string& indent_str,
+    absl::flat_hash_set<std::string>& extracted,
+    std::string* definitions_ptr) const {
   std::string name = absl::StrCat(field->name, "_value");
   if (!extracted.contains(name)) {
     std::string data_type;
@@ -620,9 +620,9 @@
 }
 
 void EncodingGroup::EmitOverlayExtraction(
-    const Overlay *overlay, const std::string &indent_str,
-    absl::flat_hash_set<std::string> &extracted,
-    std::string *definitions_ptr) const {
+    const Overlay* overlay, const std::string& indent_str,
+    absl::flat_hash_set<std::string>& extracted,
+    std::string* definitions_ptr) const {
   std::string name = absl::StrCat(overlay->name(), "_value");
   if (!extracted.contains(name)) {
     auto ovl_width = overlay->declared_width();
@@ -649,16 +649,16 @@
   }
 }
 
-void EncodingGroup::EmitExtractions(
-    int indent, const std::vector<Constraint *> &constraints,
-    absl::flat_hash_set<std::string> &extracted,
-    std::string *definitions_ptr) const {
+void EncodingGroup::EmitExtractions(int indent,
+                                    const std::vector<Constraint*>& constraints,
+                                    absl::flat_hash_set<std::string>& extracted,
+                                    std::string* definitions_ptr) const {
   std::string indent_str(indent + 2, ' ');
   // Write any field/overlay extractions needed for the constraints.
   // Note, the extractions may be wider than the instruction word width, due
   // to constant bits being added, so make sure to use appropriate type for
   // each extraction.
-  for (auto const *constraint : constraints) {
+  for (auto const* constraint : constraints) {
     if (constraint->can_ignore) continue;
     if (constraint->field != nullptr) {
       EmitFieldExtraction(constraint->field, indent_str, extracted,
@@ -678,10 +678,10 @@
 }
 
 int EncodingGroup::EmitOtherConstraintConditions(
-    const std::vector<Constraint *> &constraints, std::string &connector,
-    std::string *condition) const {
+    const std::vector<Constraint*>& constraints, std::string& connector,
+    std::string* condition) const {
   int count = 0;
-  for (auto const *constraint : constraints) {
+  for (auto const* constraint : constraints) {
     if (constraint->can_ignore) continue;
 
     std::string comparison(kComparison[static_cast<int>(constraint->type)]);
@@ -709,10 +709,10 @@
 }
 
 int EncodingGroup::EmitConstraintConditions(
-    const std::vector<Constraint *> &constraints, absl::string_view comparison,
-    std::string &connector, std::string *condition) const {
+    const std::vector<Constraint*>& constraints, absl::string_view comparison,
+    std::string& connector, std::string* condition) const {
   int count = 0;
-  for (auto const *constraint : constraints) {
+  for (auto const* constraint : constraints) {
     std::string comparison(kComparison[static_cast<int>(constraint->type)]);
     if (constraint->can_ignore) continue;
     std::string name = absl::StrCat((constraint->field != nullptr)
@@ -757,7 +757,7 @@
       "  encodings:     ", encoding_vec_.size(), "\n");
   if (encoding_group_vec_.empty()) {
     auto recipe = GetExtractionRecipe(varying_ & mask_ & ~ignore_);
-    for (auto *enc : encoding_vec_) {
+    for (auto* enc : encoding_vec_) {
       uint64_t value = ExtractValue(enc->GetValue(), recipe);
       absl::StrAppend(&output, "//", indent, "  ", enc->name(), ": ",
                       absl::Hex(enc->GetValue() & varying_ & mask_, pad), " : ",
@@ -770,7 +770,7 @@
         mask &= ~ignore_;
         absl::StrAppend(&output, absl::Hex(mask, pad), ": ");
       }
-      for (auto *constraint : enc->equal_extracted_constraints()) {
+      for (auto* constraint : enc->equal_extracted_constraints()) {
         std::string name = constraint->field == nullptr
                                ? constraint->overlay->name()
                                : constraint->field->name;
@@ -778,7 +778,7 @@
                         absl::Hex(constraint->value, absl::PadSpec::kZeroPad8),
                         " ");
       }
-      for (auto *constraint : enc->other_constraints()) {
+      for (auto* constraint : enc->other_constraints()) {
         std::string name = constraint->field == nullptr
                                ? constraint->overlay->name()
                                : constraint->field->name;
@@ -797,7 +797,7 @@
       absl::StrAppend(&output, "\n");
     }
   } else {
-    for (auto *group : encoding_group_vec_) {
+    for (auto* group : encoding_group_vec_) {
       absl::StrAppend(&output, group->DumpGroup("SUB" + prefix, indent + "  "));
     }
   }
diff --git a/mpact/sim/decoder/encoding_group.h b/mpact/sim/decoder/encoding_group.h
index 5ff661d..9f470ba 100644
--- a/mpact/sim/decoder/encoding_group.h
+++ b/mpact/sim/decoder/encoding_group.h
@@ -42,17 +42,17 @@
 // can be used to differentiate the encodings.
 class EncodingGroup {
  public:
-  EncodingGroup(InstructionGroup *inst_group, uint64_t ignore);
-  EncodingGroup(EncodingGroup *parent, InstructionGroup *inst_group,
+  EncodingGroup(InstructionGroup* inst_group, uint64_t ignore);
+  EncodingGroup(EncodingGroup* parent, InstructionGroup* inst_group,
                 uint64_t ignore);
   ~EncodingGroup();
   // Remove bits from a mask that are already handled by parent encoding group.
   void AdjustMask();
 
-  void AddEncoding(InstructionEncoding *enc);
+  void AddEncoding(InstructionEncoding* enc);
   // True if the encoding can be added to the group (i.e., there are
   // sufficiently many "overlapping" bits.
-  bool CanAddEncoding(InstructionEncoding *enc);
+  bool CanAddEncoding(InstructionEncoding* enc);
   // True if the encodings can be decoded using a simple lookup table without
   // any further comparisons.
   bool IsSimpleDecode();
@@ -61,11 +61,11 @@
   // Verify that there are no collisions of opcodes in the simple decoders.
   void CheckEncodings() const;
   // Emit code for the initializers (decode tables) and the decoder functions.
-  void EmitInitializers(absl::string_view name, std::string *initializers_ptr,
-                        const std::string &opcode_enum) const;
-  void EmitDecoders(absl::string_view name, std::string *declarations_ptr,
-                    std::string *definitions_ptr,
-                    const std::string &opcode_enum) const;
+  void EmitInitializers(absl::string_view name, std::string* initializers_ptr,
+                        const std::string& opcode_enum) const;
+  void EmitDecoders(absl::string_view name, std::string* declarations_ptr,
+                    std::string* definitions_ptr,
+                    const std::string& opcode_enum) const;
   // Return a string containing information about the current group. This will
   // be removed at a later stage.
   // TODO(torerik): remove when no longer needed.
@@ -73,7 +73,7 @@
 
   // Accessors.
   // Return the parent encoding group if it exists.
-  EncodingGroup *parent() const { return parent_; }
+  EncodingGroup* parent() const { return parent_; }
   // The mask is the intersection of the bits that are significant to the
   // instruction encodings in this group. The bits that are used to select this
   // group from the parent are removed from the mask.
@@ -97,49 +97,49 @@
   // be non-zero).
   bool simple_decoding() const { return simple_decoding_; }
   // The vector of encodings in this group.
-  const std::vector<InstructionEncoding *> &encoding_vec() const {
+  const std::vector<InstructionEncoding*>& encoding_vec() const {
     return encoding_vec_;
   }
   // The vector of subgroups in this group.
-  std::vector<EncodingGroup *> &encoding_group_vec() {
+  std::vector<EncodingGroup*>& encoding_group_vec() {
     return encoding_group_vec_;
   }
 
  private:
   // Methods that factors out some of the complexities of the public code
   // emitting methods.
-  void EmitComplexDecoderBody(std::string *definitions_ptr,
+  void EmitComplexDecoderBody(std::string* definitions_ptr,
                               absl::string_view index_extraction,
                               absl::string_view opcode_enum) const;
-  void EmitComplexDecoderBodyIfSequence(std::string *definitions_ptr,
+  void EmitComplexDecoderBodyIfSequence(std::string* definitions_ptr,
                                         absl::string_view opcode_enum) const;
-  int EmitEncodingIfStatement(int indent, const InstructionEncoding *encoding,
+  int EmitEncodingIfStatement(int indent, const InstructionEncoding* encoding,
                               absl::string_view opcode_enum,
-                              absl::flat_hash_set<std::string> &extracted,
-                              std::string *definitions_ptr) const;
-  void ProcessConstraint(const absl::flat_hash_set<std::string> &extracted,
-                         Constraint *constraint,
-                         std::string *definitions_ptr) const;
-  void EmitFieldExtraction(const Field *field, const std::string &indent_str,
-                           absl::flat_hash_set<std::string> &extracted,
-                           std::string *definitions_ptr) const;
-  void EmitOverlayExtraction(const Overlay *overlay,
-                             const std::string &indent_str,
-                             absl::flat_hash_set<std::string> &extracted,
-                             std::string *definitions_ptr) const;
-  void EmitExtractions(int indent, const std::vector<Constraint *> &constraints,
-                       absl::flat_hash_set<std::string> &extracted,
-                       std::string *definitions_ptr) const;
-  int EmitConstraintConditions(const std::vector<Constraint *> &constraints,
+                              absl::flat_hash_set<std::string>& extracted,
+                              std::string* definitions_ptr) const;
+  void ProcessConstraint(const absl::flat_hash_set<std::string>& extracted,
+                         Constraint* constraint,
+                         std::string* definitions_ptr) const;
+  void EmitFieldExtraction(const Field* field, const std::string& indent_str,
+                           absl::flat_hash_set<std::string>& extracted,
+                           std::string* definitions_ptr) const;
+  void EmitOverlayExtraction(const Overlay* overlay,
+                             const std::string& indent_str,
+                             absl::flat_hash_set<std::string>& extracted,
+                             std::string* definitions_ptr) const;
+  void EmitExtractions(int indent, const std::vector<Constraint*>& constraints,
+                       absl::flat_hash_set<std::string>& extracted,
+                       std::string* definitions_ptr) const;
+  int EmitConstraintConditions(const std::vector<Constraint*>& constraints,
                                absl::string_view comparison,
-                               std::string &connector,
-                               std::string *condition) const;
-  int EmitOtherConstraintConditions(
-      const std::vector<Constraint *> &constraints, std::string &connector,
-      std::string *condition) const;
+                               std::string& connector,
+                               std::string* condition) const;
+  int EmitOtherConstraintConditions(const std::vector<Constraint*>& constraints,
+                                    std::string& connector,
+                                    std::string* condition) const;
 
-  InstructionGroup *inst_group_ = nullptr;
-  EncodingGroup *parent_ = nullptr;
+  InstructionGroup* inst_group_ = nullptr;
+  EncodingGroup* parent_ = nullptr;
   uint64_t varying_ = 0;
   uint64_t discriminator_ = 0;
   size_t discriminator_size_ = 0;
@@ -151,8 +151,8 @@
   uint64_t ignore_ = 0;
   bool simple_decoding_ = false;
   std::string inst_word_type_;
-  std::vector<InstructionEncoding *> encoding_vec_;
-  std::vector<EncodingGroup *> encoding_group_vec_;
+  std::vector<InstructionEncoding*> encoding_vec_;
+  std::vector<EncodingGroup*> encoding_group_vec_;
 };
 
 }  // namespace bin_format
diff --git a/mpact/sim/decoder/extract.cc b/mpact/sim/decoder/extract.cc
index b2e4cf7..c73db46 100644
--- a/mpact/sim/decoder/extract.cc
+++ b/mpact/sim/decoder/extract.cc
@@ -14,10 +14,12 @@
 
 #include "mpact/sim/decoder/extract.h"
 
+#include <cstdint>
 #include <string>
 #include <vector>
 
 #include "absl/strings/str_cat.h"
+#include "absl/strings/string_view.h"
 
 namespace mpact {
 namespace sim {
@@ -25,7 +27,7 @@
 namespace bin_format {
 
 uint64_t ExtractValue(uint64_t value,
-                      const std::vector<ExtractionStep> &recipe) {
+                      const std::vector<ExtractionStep>& recipe) {
   uint64_t extracted_value = 0;
   for (auto [mask, shift] : recipe) {
     extracted_value |= ((value >> shift) & mask);
@@ -33,7 +35,7 @@
   return extracted_value;
 }
 
-std::string WriteExtraction(const std::vector<ExtractionStep> &recipe,
+std::string WriteExtraction(const std::vector<ExtractionStep>& recipe,
                             absl::string_view value, absl::string_view result,
                             absl::string_view indent) {
   std::string output;
diff --git a/mpact/sim/decoder/extract.h b/mpact/sim/decoder/extract.h
index 585b6d9..bcb263a 100644
--- a/mpact/sim/decoder/extract.h
+++ b/mpact/sim/decoder/extract.h
@@ -41,13 +41,13 @@
 
 // Using the extraction recipe given, perform the extraction from the input
 // value and return the result.
-uint64_t ExtractValue(uint64_t value, const ExtractionRecipe &recipe);
+uint64_t ExtractValue(uint64_t value, const ExtractionRecipe& recipe);
 
 // Using the extraction recipe given, return a string that has the C code for
 // performing the extraction assuming the input value is stored in a variable
 // with the name stored in 'value' and the result should be stored in variable
 // named as stored in 'result'. Each line in the code is indented by 'indent'.
-std::string WriteExtraction(const ExtractionRecipe &recipe,
+std::string WriteExtraction(const ExtractionRecipe& recipe,
                             absl::string_view value, absl::string_view result,
                             absl::string_view indent);
 
diff --git a/mpact/sim/decoder/format.cc b/mpact/sim/decoder/format.cc
index 5005388..0acecfd 100644
--- a/mpact/sim/decoder/format.cc
+++ b/mpact/sim/decoder/format.cc
@@ -45,7 +45,7 @@
 
 // The equality operator compares to verify that the field/format definitions
 // are equivalent, i.e., refers to the same bits.
-bool FieldOrFormat::operator==(const FieldOrFormat &rhs) const {
+bool FieldOrFormat::operator==(const FieldOrFormat& rhs) const {
   if (is_field_ != rhs.is_field_) return false;
   if (is_field_) {
     if (high_ != rhs.high_) return false;
@@ -56,17 +56,17 @@
   return true;
 }
 
-bool FieldOrFormat::operator!=(const FieldOrFormat &rhs) const {
+bool FieldOrFormat::operator!=(const FieldOrFormat& rhs) const {
   return !(*this == rhs);
 }
 
 using ::mpact::sim::machine_description::instruction_set::ToPascalCase;
 
-Format::Format(std::string name, int width, BinEncodingInfo *encoding_info)
+Format::Format(std::string name, int width, BinEncodingInfo* encoding_info)
     : Format(name, width, "", encoding_info) {}
 
 Format::Format(std::string name, int width, std::string base_format_name,
-               BinEncodingInfo *encoding_info)
+               BinEncodingInfo* encoding_info)
     : name_(name),
       base_format_name_(base_format_name),
       declared_width_(width),
@@ -77,11 +77,11 @@
   //   delete field_ptr;
   // }
   field_map_.clear();
-  for (auto &[unused, overlay_ptr] : overlay_map_) {
+  for (auto& [unused, overlay_ptr] : overlay_map_) {
     delete overlay_ptr;
   }
   overlay_map_.clear();
-  for (auto *field : field_vec_) {
+  for (auto* field : field_vec_) {
     delete field;
   }
   field_vec_.clear();
@@ -105,14 +105,14 @@
 // format. This will be resolved once all the formats have been parsed.
 void Format::AddFormatReferenceField(std::string format_alias,
                                      std::string format_name, int size,
-                                     antlr4::Token *ctx) {
+                                     antlr4::Token* ctx) {
   field_vec_.push_back(new FieldOrFormat(format_alias, format_name, size, ctx));
 }
 
 // Add an overlay to the current format. An overlay is a named alias for a
 // not necessarily contiguous nor in order collection of bits in the format.
-absl::StatusOr<Overlay *> Format::AddFieldOverlay(std::string name,
-                                                  bool is_signed, int width) {
+absl::StatusOr<Overlay*> Format::AddFieldOverlay(std::string name,
+                                                 bool is_signed, int width) {
   // Make sure that the name isn't used already in the format.
   if (overlay_map_.contains(name)) {
     return absl::InvalidArgumentError(
@@ -128,14 +128,14 @@
 }
 
 // Return the named field if it exists, nullptr otherwise.
-Field *Format::GetField(absl::string_view field_name) const {
+Field* Format::GetField(absl::string_view field_name) const {
   auto iter = field_map_.find(field_name);
   if (iter == field_map_.end()) return nullptr;
   return iter->second;
 }
 
 // Return the named field if it exists, nullptr otherwise.
-Overlay *Format::GetOverlay(absl::string_view overlay_name) const {
+Overlay* Format::GetOverlay(absl::string_view overlay_name) const {
   auto iter = overlay_map_.find(overlay_name);
   if (iter == overlay_map_.end()) return nullptr;
   return iter->second;
@@ -172,7 +172,7 @@
   // If there is a base format name, look up that format, verify that the widths
   // are the same.
   if (!base_format_name_.empty()) {
-    auto *base_format = encoding_info_->GetFormat(base_format_name_);
+    auto* base_format = encoding_info_->GetFormat(base_format_name_);
     if (base_format == nullptr) {
       return absl::InternalError(
           absl::StrCat("Format ", name(), " refers to undefined base format ",
@@ -191,10 +191,10 @@
     // Go through the list of fields/format references. Get the declared widths
     // of the formats and add to the computed width. Signal error if the
     // computed width differs from the declared width.
-    for (auto *field_or_format : field_vec_) {
+    for (auto* field_or_format : field_vec_) {
       // Field.
       if (field_or_format->is_field()) {
-        auto *field = field_or_format->field();
+        auto* field = field_or_format->field();
         field->high = declared_width_ - computed_width_ - 1;
         field->low = field->high - field->width + 1;
         computed_width_ += field->width;
@@ -203,7 +203,7 @@
       }
 
       // Format;
-      auto *format = field_or_format->format();
+      auto* format = field_or_format->format();
       if (format == nullptr) {
         std::string fmt_name = field_or_format->format_name();
         format = encoding_info_->GetFormat(fmt_name);
@@ -224,7 +224,7 @@
           ") differs from computed width (", computed_width_, ")"));
     }
   }
-  for (auto &[name, overlay_ptr] : overlay_map_) {
+  for (auto& [name, overlay_ptr] : overlay_map_) {
     auto status = overlay_ptr->ComputeHighLow();
     if (!status.ok()) return status;
     overlay_extractors_.insert(std::make_pair(name, overlay_ptr));
@@ -241,12 +241,12 @@
 // in the base format namespace. This method is used to propagate such
 // potential promotions upward in the inheritance tree.
 void Format::PropagateExtractorsUp() {
-  for (auto *fmt : derived_formats_) {
+  for (auto* fmt : derived_formats_) {
     fmt->PropagateExtractorsUp();
   }
   if (base_format_ != nullptr) {
     // Try to propagate extractors up the inheritance tree.
-    for (auto const &[name, field_or_format_ptr] : extractors_) {
+    for (auto const& [name, field_or_format_ptr] : extractors_) {
       // Ignore those that have a nullptr, they have already failed to be
       // promoted.
       if (field_or_format_ptr == nullptr) continue;
@@ -264,7 +264,7 @@
         base_format_->extractors_[name] = nullptr;
       }
     }
-    for (auto const &[name, overlay_ptr] : overlay_extractors_) {
+    for (auto const& [name, overlay_ptr] : overlay_extractors_) {
       // Ignore those that have a nullptr, they have already failed to be
       // promoted.
       if (overlay_ptr == nullptr) continue;
@@ -323,14 +323,14 @@
       continue;
     }
   }
-  for (auto *fmt : derived_formats_) {
+  for (auto* fmt : derived_formats_) {
     fmt->PropagateExtractorsDown();
   }
 }
 
 // Returns true if the current format, or a base format, contains an
 // extractor for field 'name'.
-bool Format::HasExtract(const std::string &name) const {
+bool Format::HasExtract(const std::string& name) const {
   auto iter = extractors_.find(name);
   if ((iter != extractors_.end()) && (iter->second != nullptr)) return true;
 
@@ -341,7 +341,7 @@
 
 // Returns true if the current format, or a base format, contains an
 // extractor for overlay 'name'.
-bool Format::HasOverlayExtract(const std::string &name) const {
+bool Format::HasOverlayExtract(const std::string& name) const {
   auto iter = overlay_extractors_.find(name);
   if ((iter != overlay_extractors_.end()) && (iter->second != nullptr)) {
     return true;
@@ -353,7 +353,7 @@
 }
 
 std::string Format::GeneratePackedStructFieldExtractor(
-    const Field *field) const {
+    const Field* field) const {
   std::string h_output;
   int width = field->width;
   std::string return_type = GetUIntType(width);
@@ -380,7 +380,7 @@
 
 // This method generates the C++ code for the field extractors for the current
 // format.
-std::string Format::GenerateFieldExtractor(const Field *field) const {
+std::string Format::GenerateFieldExtractor(const Field* field) const {
   std::string h_output;
   int return_width = GetIntTypeBitWidth(field->width);
   std::string result_type_name =
@@ -452,7 +452,7 @@
 }
 
 std::string Format::GeneratePackedStructFieldInserter(
-    const Field *field) const {
+    const Field* field) const {
   std::string h_output;
   std::string field_type_name;
   std::string inst_word_type_name;
@@ -486,7 +486,7 @@
 // This method generates the C++ code for field inserters for the current
 // format. That is, the generated code will take the value of a field and
 // insert it into the right place in the instruction word.
-std::string Format::GenerateFieldInserter(const Field *field) const {
+std::string Format::GenerateFieldInserter(const Field* field) const {
   std::string h_output;
   std::string field_type_name;
   std::string inst_word_type_name = GetUIntType(computed_width_);
@@ -542,7 +542,7 @@
 // This method generates the C++ code for overlay inserters for the current
 // format. That is, the generated code will take the value of an overlay and
 // insert its components into the right places in the instruction word.
-std::string Format::GenerateOverlayInserter(Overlay *overlay) const {
+std::string Format::GenerateOverlayInserter(Overlay* overlay) const {
   std::string h_output;
   std::string result_type_name = GetUIntType(computed_width_);
   std::string overlay_type_name;
@@ -580,7 +580,7 @@
       use_mask_variable = true;
     }
   }
-  for (auto &bits_or_field : overlay->component_vec()) {
+  for (auto& bits_or_field : overlay->component_vec()) {
     int width = bits_or_field->width();
     // Ignore the bit fields in the overlay.
     if (bits_or_field->high() < 0) {
@@ -622,7 +622,7 @@
 }
 
 std::string Format::GeneratePackedStructFormatInserter(
-    std::string_view format_alias, const Format *format, int high,
+    std::string_view format_alias, const Format* format, int high,
     int size) const {
   std::string h_output;
   std::string inst_word_type_name;
@@ -657,7 +657,7 @@
 // format. That is, the generated code will take the value of a format and
 // insert it into the right place in the instruction word.
 std::string Format::GenerateFormatInserter(std::string_view format_alias,
-                                           const Format *format, int high,
+                                           const Format* format, int high,
                                            int size) const {
   if (size > 1) {
     return GenerateReplicatedFormatInserter(format_alias, format, high, size);
@@ -666,7 +666,7 @@
 }
 
 std::string Format::GenerateReplicatedFormatInserter(
-    std::string_view format_alias, const Format *format, int high,
+    std::string_view format_alias, const Format* format, int high,
     int size) const {
   std::string h_output;
   std::string target_type_name = GetUIntType(declared_width_);
@@ -719,7 +719,7 @@
 }
 
 std::string Format::GenerateSingleFormatInserter(std::string_view format_alias,
-                                                 const Format *format,
+                                                 const Format* format,
                                                  int high) const {
   std::string h_output;
   std::string target_type_name = GetUIntType(declared_width_);
@@ -773,7 +773,7 @@
 }
 
 std::string Format::GeneratePackedStructFormatExtractor(
-    absl::string_view format_alias, const Format *format, int high,
+    absl::string_view format_alias, const Format* format, int high,
     int size) const {
   std::string h_output;
   int width = format->declared_width();
@@ -802,7 +802,7 @@
 // This method generates the format extractors for the current format (for
 // when a format contains other formats).
 std::string Format::GenerateFormatExtractor(absl::string_view format_alias,
-                                            const Format *format, int high,
+                                            const Format* format, int high,
                                             int size) const {
   std::string h_output;  // For each format generate an extractor.
   int width = format->declared_width();
@@ -890,7 +890,7 @@
 }
 
 std::string Format::GeneratePackedStructOverlayExtractor(
-    Overlay *overlay) const {
+    Overlay* overlay) const {
   std::string h_output;
   std::string arg_type;
   if (declared_width_ > 128) {
@@ -921,7 +921,7 @@
 }
 
 // Generates the C++ code for the overlay extractors in the current format.
-std::string Format::GenerateOverlayExtractor(Overlay *overlay) const {
+std::string Format::GenerateOverlayExtractor(Overlay* overlay) const {
   std::string h_output;
 
   std::string return_type = overlay->is_signed()
@@ -975,7 +975,7 @@
   absl::StrAppend(&h_output, "struct ", ToPascalCase(name()), " {\n\n");
   // First fields and formats.
   std::string inserter;
-  for (auto &[unused, field_or_format_ptr] : extractors_) {
+  for (auto& [unused, field_or_format_ptr] : extractors_) {
     if (field_or_format_ptr->is_field()) {
       if (layout() == Layout::kPackedStruct) {
         inserter =
@@ -998,7 +998,7 @@
     }
   }
   // Next the overlays.
-  for (auto &[unused, overlay_ptr] : overlay_extractors_) {
+  for (auto& [unused, overlay_ptr] : overlay_extractors_) {
     auto inserter = GenerateOverlayInserter(overlay_ptr);
     absl::StrAppend(&h_output, inserter);
   }
@@ -1011,7 +1011,7 @@
   // First the struct.
   absl::StrAppend(&h_output, "struct Packed", ToPascalCase(name()), " {\n");
   for (auto it = field_vec_.rbegin(); it != field_vec_.rend(); ++it) {
-    auto *component = *it;
+    auto* component = *it;
     if (component->is_field()) {
       int width = component->field()->width;
       std::string field_type = component->field()->is_signed
@@ -1073,7 +1073,7 @@
   }
 
   // First fields and formats.
-  for (auto &[unused, field_or_format_ptr] : extractors_) {
+  for (auto& [unused, field_or_format_ptr] : extractors_) {
     if (field_or_format_ptr->is_field()) {
       std::string extractor;
       if (layout() == Layout::kPackedStruct) {
@@ -1101,7 +1101,7 @@
   }
 
   // Then the overlays.
-  for (auto &[unused, overlay_ptr] : overlay_extractors_) {
+  for (auto& [unused, overlay_ptr] : overlay_extractors_) {
     std::string extractor;
     if (layout() == Layout::kPackedStruct) {
       extractor = GeneratePackedStructOverlayExtractor(overlay_ptr);
@@ -1120,7 +1120,7 @@
   return extractors;
 }
 
-bool Format::IsDerivedFrom(const Format *format) {
+bool Format::IsDerivedFrom(const Format* format) {
   if (format == this) return true;
   if (base_format_ == nullptr) return false;
   if (base_format_ == format) return true;
diff --git a/mpact/sim/decoder/format.h b/mpact/sim/decoder/format.h
index deb4a55..36081f5 100644
--- a/mpact/sim/decoder/format.h
+++ b/mpact/sim/decoder/format.h
@@ -46,8 +46,8 @@
   int high;
   int low;
   int width;
-  Format *format = nullptr;
-  Field(std::string name_, bool is_signed_, int width_, Format *format_)
+  Format* format = nullptr;
+  Field(std::string name_, bool is_signed_, int width_, Format* format_)
       : name(name_),
         is_signed(is_signed_),
         high(-1),
@@ -70,9 +70,9 @@
 
 class FieldOrFormat {
  public:
-  explicit FieldOrFormat(Field *field) : is_field_(true), field_(field) {}
+  explicit FieldOrFormat(Field* field) : is_field_(true), field_(field) {}
   FieldOrFormat(std::string format_alias, std::string fmt_name, int size,
-                antlr4::Token *ctx)
+                antlr4::Token* ctx)
       : is_field_(false),
         format_name_(fmt_name),
         format_alias_(format_alias),
@@ -81,28 +81,28 @@
   ~FieldOrFormat();
 
   bool is_field() const { return is_field_; }
-  Field *field() const { return field_; }
+  Field* field() const { return field_; }
   int high() const { return high_; }
   void set_high(int value) { high_ = value; }
-  const std::string &format_name() const { return format_name_; }
-  antlr4::Token *ctx() const { return ctx_; }
-  Format *format() const { return format_; }
+  const std::string& format_name() const { return format_name_; }
+  antlr4::Token* ctx() const { return ctx_; }
+  Format* format() const { return format_; }
   absl::string_view format_alias() const { return format_alias_; }
   int size() const { return size_; }
-  void set_format(Format *fmt) { format_ = fmt; }
+  void set_format(Format* fmt) { format_ = fmt; }
 
-  bool operator==(const FieldOrFormat &rhs) const;
-  bool operator!=(const FieldOrFormat &rhs) const;
+  bool operator==(const FieldOrFormat& rhs) const;
+  bool operator!=(const FieldOrFormat& rhs) const;
 
  private:
   bool is_field_;
-  Field *field_ = nullptr;
+  Field* field_ = nullptr;
   std::string format_name_;
   std::string format_alias_;
   int high_ = 0;
   int size_ = 0;
-  antlr4::Token *ctx_ = nullptr;
-  Format *format_ = nullptr;
+  antlr4::Token* ctx_ = nullptr;
+  Format* format_ = nullptr;
 };
 
 struct Extractors {
@@ -120,9 +120,9 @@
   };
 
   Format() = delete;
-  Format(std::string name, int width, BinEncodingInfo *encoding_info);
+  Format(std::string name, int width, BinEncodingInfo* encoding_info);
   Format(std::string name, int width, std::string base_format_name,
-         BinEncodingInfo *encoding_info);
+         BinEncodingInfo* encoding_info);
   ~Format();
 
   // Adds a field (signed or unsigned) of the given width to the format.
@@ -131,18 +131,18 @@
   // another format later, or generate an error at that time.
   void AddFormatReferenceField(std::string format_alias,
                                std::string format_name, int size,
-                               antlr4::Token *ctx);
+                               antlr4::Token* ctx);
   // Adds an overlay to the format. An overlay is an alias to a set of bits
   // in the instruction format.
-  absl::StatusOr<Overlay *> AddFieldOverlay(std::string name, bool is_signed,
-                                            int width);
+  absl::StatusOr<Overlay*> AddFieldOverlay(std::string name, bool is_signed,
+                                           int width);
 
   // Returns the named field if it exists in the format. Otherwise it returns
   // nullptr.
-  Field *GetField(absl::string_view field_name) const;
+  Field* GetField(absl::string_view field_name) const;
   // Returns the named overlay if it exists in the format. Otherwise it returns
   // nullptr.
-  Overlay *GetOverlay(absl::string_view overlay_name) const;
+  Overlay* GetOverlay(absl::string_view overlay_name) const;
 
   // Performs a consistency check on the format.
   absl::Status ComputeAndCheckFormatWidth();
@@ -156,54 +156,54 @@
   std::string GenerateInserters() const;
 
   // True if the current format is a descendent of format.
-  bool IsDerivedFrom(const Format *format);
+  bool IsDerivedFrom(const Format* format);
 
   // Accessors.
-  const std::string &name() const { return name_; }
+  const std::string& name() const { return name_; }
   // The unsigned integer type name larger or equal to the format width.
   // E.g. uint32_t etc.
-  const std::string &uint_type_name() const { return uint_type_name_; }
+  const std::string& uint_type_name() const { return uint_type_name_; }
   int declared_width() const { return declared_width_; }
   int computed_width() const { return computed_width_; }
-  Format *base_format() const { return base_format_; }
+  Format* base_format() const { return base_format_; }
   // Return pointer to the parent encoding info class.
-  BinEncodingInfo *encoding_info() const { return encoding_info_; }
+  BinEncodingInfo* encoding_info() const { return encoding_info_; }
   // Field layout.
   Layout layout() const { return layout_; }
   void set_layout(Layout layout) { layout_ = layout; }
 
  private:
-  bool HasExtract(const std::string &name) const;
-  bool HasOverlayExtract(const std::string &name) const;
+  bool HasExtract(const std::string& name) const;
+  bool HasOverlayExtract(const std::string& name) const;
 
   // Extractor generators.
   std::string GeneratePackedStructTypes() const;
-  std::string GeneratePackedStructFieldExtractor(const Field *field) const;
+  std::string GeneratePackedStructFieldExtractor(const Field* field) const;
   std::string GeneratePackedStructFormatExtractor(std::string_view format_alias,
-                                                  const Format *format,
+                                                  const Format* format,
                                                   int high, int size) const;
-  std::string GeneratePackedStructOverlayExtractor(Overlay *overlay) const;
-  std::string GenerateFieldExtractor(const Field *field) const;
+  std::string GeneratePackedStructOverlayExtractor(Overlay* overlay) const;
+  std::string GenerateFieldExtractor(const Field* field) const;
   std::string GenerateFormatExtractor(std::string_view format_alias,
-                                      const Format *format, int high,
+                                      const Format* format, int high,
                                       int size) const;
-  std::string GenerateOverlayExtractor(Overlay *overlay) const;
+  std::string GenerateOverlayExtractor(Overlay* overlay) const;
   // Inserters.
-  std::string GenerateFieldInserter(const Field *field) const;
-  std::string GeneratePackedStructFieldInserter(const Field *field) const;
+  std::string GenerateFieldInserter(const Field* field) const;
+  std::string GeneratePackedStructFieldInserter(const Field* field) const;
   std::string GenerateFormatInserter(std::string_view format_alias,
-                                     const Format *format, int high,
+                                     const Format* format, int high,
                                      int size) const;
   std::string GeneratePackedStructFormatInserter(std::string_view format_alias,
-                                                 const Format *format, int high,
+                                                 const Format* format, int high,
                                                  int size) const;
   std::string GenerateReplicatedFormatInserter(std::string_view format_alias,
-                                               const Format *format, int high,
+                                               const Format* format, int high,
                                                int size) const;
   std::string GenerateSingleFormatInserter(std::string_view format_alias,
-                                           const Format *format,
+                                           const Format* format,
                                            int high) const;
-  std::string GenerateOverlayInserter(Overlay *overlay) const;
+  std::string GenerateOverlayInserter(Overlay* overlay) const;
   // Return string representation of the int type that contains bitwidth bits.
   std::string GetIntType(int bitwidth) const;
   std::string GetUIntType(int bitwidth) const;
@@ -216,17 +216,17 @@
   int declared_width_;
   int computed_width_ = 0;
   Layout layout_ = Layout::kDefault;
-  Format *base_format_ = nullptr;
-  std::vector<Format *> derived_formats_;
-  BinEncodingInfo *encoding_info_;
+  Format* base_format_ = nullptr;
+  std::vector<Format*> derived_formats_;
+  BinEncodingInfo* encoding_info_;
 
-  absl::btree_map<std::string, Overlay *> overlay_map_;
-  absl::btree_map<std::string, Field *> field_map_;
-  std::vector<FieldOrFormat *> field_vec_;
+  absl::btree_map<std::string, Overlay*> overlay_map_;
+  absl::btree_map<std::string, Field*> field_map_;
+  std::vector<FieldOrFormat*> field_vec_;
   // Using std::map because of sorted traversal and better iterator stability
   // when elements are erased.
-  std::map<std::string, FieldOrFormat *> extractors_;
-  std::map<std::string, Overlay *> overlay_extractors_;
+  std::map<std::string, FieldOrFormat*> extractors_;
+  std::map<std::string, Overlay*> overlay_extractors_;
 };
 
 }  // namespace bin_format
diff --git a/mpact/sim/decoder/instruction.cc b/mpact/sim/decoder/instruction.cc
index 6232b11..e784d8a 100644
--- a/mpact/sim/decoder/instruction.cc
+++ b/mpact/sim/decoder/instruction.cc
@@ -28,27 +28,27 @@
 namespace machine_description {
 namespace instruction_set {
 
-Instruction::Instruction(Opcode *opcode, Slot *slot)
+Instruction::Instruction(Opcode* opcode, Slot* slot)
     : Instruction(opcode, nullptr, slot) {}
-Instruction::Instruction(Opcode *opcode, Instruction *child, Slot *slot)
+Instruction::Instruction(Opcode* opcode, Instruction* child, Slot* slot)
     : opcode_(opcode), child_(child), slot_(slot) {}
 
 Instruction::~Instruction() {
   delete child_;
   delete opcode_;
-  for (auto *ref : resource_use_vec_) {
+  for (auto* ref : resource_use_vec_) {
     delete ref;
   }
   resource_use_vec_.clear();
-  for (auto *ref : resource_acquire_vec_) {
+  for (auto* ref : resource_acquire_vec_) {
     delete ref;
   }
   resource_acquire_vec_.clear();
-  for (auto *disasm_format : disasm_format_vec_) {
+  for (auto* disasm_format : disasm_format_vec_) {
     delete disasm_format;
   }
   disasm_format_vec_.clear();
-  for (auto &[ignored, expr] : attribute_map_) {
+  for (auto& [ignored, expr] : attribute_map_) {
     delete expr;
   }
   attribute_map_.clear();
@@ -57,7 +57,7 @@
 // Append is implemented recursively. Few instructions have child instances,
 // and when they do it's likely to be a very small number. Not concern for
 // efficiency here.
-void Instruction::AppendChild(Instruction *child) {
+void Instruction::AppendChild(Instruction* child) {
   if (child_ == nullptr) {
     child_ = child;
     return;
@@ -65,16 +65,16 @@
   child_->AppendChild(child);
 }
 
-void Instruction::AppendResourceUse(const ResourceReference *resource_ref) {
+void Instruction::AppendResourceUse(const ResourceReference* resource_ref) {
   resource_use_vec_.push_back(resource_ref);
 }
 
-void Instruction::AppendResourceAcquire(const ResourceReference *resource_ref) {
+void Instruction::AppendResourceAcquire(const ResourceReference* resource_ref) {
   resource_acquire_vec_.push_back(resource_ref);
 }
 
 void Instruction::AddInstructionAttribute(absl::string_view attr_name,
-                                          TemplateExpression *expression) {
+                                          TemplateExpression* expression) {
   // See if the attribute is already defined. If not, create a new attribute
   // in the map, otherwise update the expression.
   auto iter = attribute_map_.find(attr_name);
@@ -91,14 +91,14 @@
   AddInstructionAttribute(attr_name, new TemplateConstant(1));
 }
 
-void Instruction::AppendDisasmFormat(DisasmFormat *disasm_format) {
+void Instruction::AppendDisasmFormat(DisasmFormat* disasm_format) {
   disasm_format_vec_.push_back(disasm_format);
 }
 
 // Creating a derived instruction involves copying attributes and re-evaluating
 // any expressions that depend on any slot template instantiation values.
-absl::StatusOr<Instruction *> Instruction::CreateDerivedInstruction(
-    TemplateInstantiationArgs *args) const {
+absl::StatusOr<Instruction*> Instruction::CreateDerivedInstruction(
+    TemplateInstantiationArgs* args) const {
   // First try to create a derived opcode object. Fail if it fails.
   auto op_result =
       slot_->instruction_set()->opcode_factory()->CreateDerivedOpcode(opcode(),
@@ -106,17 +106,17 @@
   if (!op_result.ok()) return op_result.status();
 
   // Create a new instruction object with the derived opcode object.
-  auto *new_inst = new Instruction(op_result.value(), slot_);
+  auto* new_inst = new Instruction(op_result.value(), slot_);
 
   // Disassembly format.
-  for (auto const *disasm_fmt : disasm_format_vec()) {
+  for (auto const* disasm_fmt : disasm_format_vec()) {
     new_inst->AppendDisasmFormat(new DisasmFormat(*disasm_fmt));
   }
   // Semantic function string.
   new_inst->set_semfunc_code_string(semfunc_code_string());
 
   // Resource uses.
-  for (auto const &resource_use : resource_use_vec()) {
+  for (auto const& resource_use : resource_use_vec()) {
     auto ref_result = CreateDerivedResourceRef(resource_use, args);
     if (!ref_result.status().ok()) {
       delete new_inst;
@@ -126,7 +126,7 @@
   }
 
   // Resource reservations.
-  for (auto const *resource_def : resource_acquire_vec()) {
+  for (auto const* resource_def : resource_acquire_vec()) {
     auto ref_result = CreateDerivedResourceRef(resource_def, args);
     if (!ref_result.status().ok()) {
       delete new_inst;
@@ -136,7 +136,7 @@
   }
 
   // Instruction attributes.
-  for (auto const &[attr_name, expr_ptr] : attribute_map_) {
+  for (auto const& [attr_name, expr_ptr] : attribute_map_) {
     auto result = expr_ptr->Evaluate(args);
     if (result.ok()) {
       new_inst->AddInstructionAttribute(attr_name, result.value());
@@ -159,10 +159,10 @@
   return result.status();
 }
 
-absl::StatusOr<ResourceReference *> Instruction::CreateDerivedResourceRef(
-    const ResourceReference *ref, TemplateInstantiationArgs *args) const {
-  TemplateExpression *begin_expr = nullptr;
-  TemplateExpression *end_expr = nullptr;
+absl::StatusOr<ResourceReference*> Instruction::CreateDerivedResourceRef(
+    const ResourceReference* ref, TemplateInstantiationArgs* args) const {
+  TemplateExpression* begin_expr = nullptr;
+  TemplateExpression* end_expr = nullptr;
   // Evaluate the begin expression in the context of any template instantiation
   // arguments.
   if (ref->begin_expression != nullptr) {
@@ -185,7 +185,7 @@
     }
     end_expr = result.value();
   }
-  auto *new_ref = new ResourceReference(ref->resource, ref->is_array,
+  auto* new_ref = new ResourceReference(ref->resource, ref->is_array,
                                         ref->dest_op, begin_expr, end_expr);
   return new_ref;
 }
@@ -193,7 +193,7 @@
 // The destination op is stored in the opcode object, however, the child pointer
 // is in the instruction object, so traverse the instructions along the child
 // chain to find the destination operand.
-DestinationOperand *Instruction::GetDestOp(absl::string_view op_name) const {
+DestinationOperand* Instruction::GetDestOp(absl::string_view op_name) const {
   auto dest_op = opcode()->GetDestOp(op_name);
   if (dest_op != nullptr) return dest_op;
 
@@ -207,7 +207,7 @@
 // This is called prior to overriding the attribute value to clean up any
 // allocated memory.
 void Instruction::ClearDisasmFormat() {
-  for (auto *disasm_format : disasm_format_vec_) {
+  for (auto* disasm_format : disasm_format_vec_) {
     delete disasm_format;
   }
   disasm_format_vec_.clear();
@@ -216,18 +216,18 @@
 void Instruction::ClearSemfuncCodeString() { semfunc_code_string_.clear(); }
 
 void Instruction::ClearResourceSpecs() {
-  for (auto *ref : resource_use_vec_) {
+  for (auto* ref : resource_use_vec_) {
     delete ref;
   }
   resource_use_vec_.clear();
-  for (auto *ref : resource_acquire_vec_) {
+  for (auto* ref : resource_acquire_vec_) {
     delete ref;
   }
   resource_acquire_vec_.clear();
 }
 
 void Instruction::ClearAttributeSpecs() {
-  for (auto &[ignored, expr] : attribute_map_) {
+  for (auto& [ignored, expr] : attribute_map_) {
     delete expr;
   }
   attribute_map_.clear();
diff --git a/mpact/sim/decoder/instruction.h b/mpact/sim/decoder/instruction.h
index a04ab90..e2f6563 100644
--- a/mpact/sim/decoder/instruction.h
+++ b/mpact/sim/decoder/instruction.h
@@ -41,32 +41,32 @@
 // globally unique.
 class Instruction {
  public:
-  Instruction(Opcode *opcode, Slot *slot);
-  Instruction(Opcode *opcode, Instruction *child, Slot *slot);
+  Instruction(Opcode* opcode, Slot* slot);
+  Instruction(Opcode* opcode, Instruction* child, Slot* slot);
   virtual ~Instruction();
 
   // Append a child instruction.
-  void AppendChild(Instruction *child);
+  void AppendChild(Instruction* child);
   // Create an instruction object that inherits from another. This may require
   // evaluation of expressions within the instruction/opcode that rely on
   // template instantiation arguments.
-  absl::StatusOr<Instruction *> CreateDerivedInstruction(
-      TemplateInstantiationArgs *args) const;
+  absl::StatusOr<Instruction*> CreateDerivedInstruction(
+      TemplateInstantiationArgs* args) const;
   // Resources used and acquired/released.
-  void AppendResourceUse(const ResourceReference *resource_ref);
-  void AppendResourceAcquire(const ResourceReference *resource_ref);
+  void AppendResourceUse(const ResourceReference* resource_ref);
+  void AppendResourceAcquire(const ResourceReference* resource_ref);
   // Instruction attributes. These methods add the instruction attribute to the
   // opcode if it does not already exist. If it exists, then the new attribute
   // definition overrides the previous (replaces the expression).
   void AddInstructionAttribute(absl::string_view attr_name,
-                               TemplateExpression *expression);
+                               TemplateExpression* expression);
   void AddInstructionAttribute(absl::string_view attr_name);
   // Append disassembly format string and info.
-  void AppendDisasmFormat(DisasmFormat *disasm_format);
+  void AppendDisasmFormat(DisasmFormat* disasm_format);
 
   // Searches opcodes in the instruction (and any child instructions) for the
   // destination op with name op_name.
-  DestinationOperand *GetDestOp(absl::string_view op_name) const;
+  DestinationOperand* GetDestOp(absl::string_view op_name) const;
 
   // Methods to clear parts of the instructions that may be overridden when
   // inherited.
@@ -76,43 +76,43 @@
   void ClearAttributeSpecs();
 
   // Getters and setters.
-  Opcode *opcode() const { return opcode_; }
-  Instruction *child() const { return child_; }
-  Slot *slot() const { return slot_; }
+  Opcode* opcode() const { return opcode_; }
+  Instruction* child() const { return child_; }
+  Slot* slot() const { return slot_; }
   void set_semfunc_code_string(std::string code_string) {
     semfunc_code_string_ = code_string;
   }
-  const std::string &semfunc_code_string() const {
+  const std::string& semfunc_code_string() const {
     return semfunc_code_string_;
   }
 
-  const std::vector<const ResourceReference *> &resource_use_vec() const {
+  const std::vector<const ResourceReference*>& resource_use_vec() const {
     return resource_use_vec_;
   }
-  const std::vector<const ResourceReference *> &resource_acquire_vec() const {
+  const std::vector<const ResourceReference*>& resource_acquire_vec() const {
     return resource_acquire_vec_;
   }
 
-  const std::vector<DisasmFormat *> &disasm_format_vec() const {
+  const std::vector<DisasmFormat*>& disasm_format_vec() const {
     return disasm_format_vec_;
   }
 
-  const absl::flat_hash_map<std::string, TemplateExpression *> &attribute_map()
+  const absl::flat_hash_map<std::string, TemplateExpression*>& attribute_map()
       const {
     return attribute_map_;
   }
 
  private:
-  absl::StatusOr<ResourceReference *> CreateDerivedResourceRef(
-      const ResourceReference *ref, TemplateInstantiationArgs *args) const;
-  Opcode *opcode_;
-  Instruction *child_;
-  Slot *slot_;
-  std::vector<const ResourceReference *> resource_use_vec_;
-  std::vector<const ResourceReference *> resource_acquire_vec_;
+  absl::StatusOr<ResourceReference*> CreateDerivedResourceRef(
+      const ResourceReference* ref, TemplateInstantiationArgs* args) const;
+  Opcode* opcode_;
+  Instruction* child_;
+  Slot* slot_;
+  std::vector<const ResourceReference*> resource_use_vec_;
+  std::vector<const ResourceReference*> resource_acquire_vec_;
   std::string semfunc_code_string_;
-  std::vector<DisasmFormat *> disasm_format_vec_;
-  absl::flat_hash_map<std::string, TemplateExpression *> attribute_map_;
+  std::vector<DisasmFormat*> disasm_format_vec_;
+  absl::flat_hash_map<std::string, TemplateExpression*> attribute_map_;
 };
 
 }  // namespace instruction_set
diff --git a/mpact/sim/decoder/instruction_encoding.cc b/mpact/sim/decoder/instruction_encoding.cc
index 3fd17b7..c57afa9 100644
--- a/mpact/sim/decoder/instruction_encoding.cc
+++ b/mpact/sim/decoder/instruction_encoding.cc
@@ -29,13 +29,13 @@
 namespace decoder {
 namespace bin_format {
 
-InstructionEncoding::InstructionEncoding(std::string name, Format *format)
+InstructionEncoding::InstructionEncoding(std::string name, Format* format)
     : name_(name), format_(format) {
   if (format) format_name_ = format->name();
 }
 
 // Custom copy constructor.
-InstructionEncoding::InstructionEncoding(const InstructionEncoding &encoding)
+InstructionEncoding::InstructionEncoding(const InstructionEncoding& encoding)
     : name_(encoding.name_),
       format_name_(encoding.format_name_),
       format_(encoding.format_),
@@ -45,42 +45,42 @@
       extracted_mask_(encoding.extracted_mask_),
       value_(encoding.value_) {
   // Copy construct each of the constraints.
-  for (auto *constraint : encoding.equal_constraints_) {
+  for (auto* constraint : encoding.equal_constraints_) {
     equal_constraints_.push_back(new Constraint(*constraint));
   }
-  for (auto *constraint : encoding.equal_extracted_constraints_) {
+  for (auto* constraint : encoding.equal_extracted_constraints_) {
     equal_extracted_constraints_.push_back(new Constraint(*constraint));
   }
-  for (auto *constraint : encoding.other_constraints_) {
+  for (auto* constraint : encoding.other_constraints_) {
     other_constraints_.push_back(new Constraint(*constraint));
   }
 }
 
 InstructionEncoding::~InstructionEncoding() {
-  for (auto *constraint : equal_constraints_) {
+  for (auto* constraint : equal_constraints_) {
     delete constraint;
   }
   equal_constraints_.clear();
-  for (auto *constraint : equal_extracted_constraints_) {
+  for (auto* constraint : equal_extracted_constraints_) {
     delete constraint;
   }
   equal_extracted_constraints_.clear();
-  for (auto *constraint : other_constraints_) {
+  for (auto* constraint : other_constraints_) {
     delete constraint;
   }
   other_constraints_.clear();
-  for (auto &[name, enc_ptr] : specializations_) {
+  for (auto& [name, enc_ptr] : specializations_) {
     delete enc_ptr;
   }
   specializations_.clear();
 }
 
-absl::StatusOr<Constraint *> InstructionEncoding::CreateConstraint(
+absl::StatusOr<Constraint*> InstructionEncoding::CreateConstraint(
     ConstraintType type, std::string lhs_name, std::string rhs_name) {
   Constraint constraint;
   constraint.type = type;
   // Check if the field name is indeed a field.
-  auto *lhs_field = format_->GetField(lhs_name);
+  auto* lhs_field = format_->GetField(lhs_name);
   if (lhs_field != nullptr) {
     if (lhs_field->width >= 64) {
       return absl::OutOfRangeError(absl::StrCat(
@@ -90,7 +90,7 @@
     constraint.field = lhs_field;
   } else {
     // If not a field, is it an overlay?
-    auto *lhs_overlay = format_->GetOverlay(lhs_name);
+    auto* lhs_overlay = format_->GetOverlay(lhs_name);
     if (lhs_overlay == nullptr) {
       // If neither, it's an error.
       return absl::NotFoundError(absl::StrCat(
@@ -100,7 +100,7 @@
     constraint.overlay = lhs_overlay;
   }
   // Check if the field name is indeed a field.
-  auto *rhs_field = format_->GetField(rhs_name);
+  auto* rhs_field = format_->GetField(rhs_name);
   if (rhs_field != nullptr) {
     if (rhs_field->width >= 64) {
       return absl::OutOfRangeError(absl::StrCat(
@@ -110,7 +110,7 @@
     constraint.rhs_field = rhs_field;
   } else {
     // If not a field, is it an overlay?
-    auto *rhs_overlay = format_->GetOverlay(rhs_name);
+    auto* rhs_overlay = format_->GetOverlay(rhs_name);
     if (rhs_overlay == nullptr) {
       // If neither, it's an error.
       return absl::NotFoundError(absl::StrCat(
@@ -119,14 +119,14 @@
     }
     constraint.rhs_overlay = rhs_overlay;
   }
-  Constraint *result = new Constraint(constraint);
+  Constraint* result = new Constraint(constraint);
   return result;
 }
 
-absl::StatusOr<Constraint *> InstructionEncoding::CreateConstraint(
+absl::StatusOr<Constraint*> InstructionEncoding::CreateConstraint(
     ConstraintType type, std::string field_name, int64_t value) {
   // Check if the field name is indeed a field.
-  auto *field = format_->GetField(field_name);
+  auto* field = format_->GetField(field_name);
   if (field != nullptr) {
     if (field->width >= 64) {
       return absl::OutOfRangeError(absl::StrCat(
@@ -164,14 +164,14 @@
       }
     }
     value &= (1 << field->width) - 1;
-    auto *constraint = new Constraint();
+    auto* constraint = new Constraint();
     constraint->type = type;
     constraint->field = field;
     constraint->value = value;
     return constraint;
   }
   // If not a field, is it an overlay?
-  auto *overlay = format_->GetOverlay(field_name);
+  auto* overlay = format_->GetOverlay(field_name);
   if (overlay == nullptr) {
     // If neither, it's an error.
     return absl::NotFoundError(absl::StrCat(
@@ -208,7 +208,7 @@
     }
   }
   value &= (1 << width) - 1;
-  auto *constraint = new Constraint();
+  auto* constraint = new Constraint();
   constraint->type = type;
   constraint->overlay = overlay;
   constraint->value = value;
@@ -222,7 +222,7 @@
   mask_set_ = false;
   auto res = CreateConstraint(ConstraintType::kEq, field_name, value);
   if (!res.ok()) return res.status();
-  auto *constraint = res.value();
+  auto* constraint = res.value();
   if ((constraint->overlay != nullptr) &&
       constraint->overlay->must_be_extracted()) {
     // If the value is not 100% based on extracted bits (i.e., it is an
@@ -241,17 +241,17 @@
                                                      int64_t value) {
   auto res = CreateConstraint(type, field_name, value);
   if (!res.ok()) return res.status();
-  auto *constraint = res.value();
+  auto* constraint = res.value();
   other_constraints_.push_back(constraint);
   return absl::OkStatus();
 }
 
 absl::Status InstructionEncoding::AddOtherConstraint(
-    ConstraintType type, const std::string &lhs_name,
-    const std::string &rhs_name) {
+    ConstraintType type, const std::string& lhs_name,
+    const std::string& rhs_name) {
   auto res = CreateConstraint(type, lhs_name, rhs_name);
   if (!res.ok()) return res.status();
-  auto *constraint = res.value();
+  auto* constraint = res.value();
   other_constraints_.push_back(constraint);
   return absl::OkStatus();
 }
@@ -259,7 +259,7 @@
 absl::Status InstructionEncoding::ComputeMaskAndValue() {
   // First consider equal constraints.
   mask_ = 0;
-  for (auto *constraint : equal_constraints_) {
+  for (auto* constraint : equal_constraints_) {
     uint64_t mask = 0;
     uint64_t value = 0;
     if (constraint->field != nullptr) {
@@ -279,7 +279,7 @@
   }
   // The overlays with bit constant concatenations.
   extracted_mask_ = 0;
-  for (auto *constraint : equal_extracted_constraints_) {
+  for (auto* constraint : equal_extracted_constraints_) {
     uint64_t mask = 0;
     if (constraint->field != nullptr) {
       int width = constraint->field->width;
@@ -293,7 +293,7 @@
   }
   // Other constraints.
   other_mask_ = 0;
-  for (auto *constraint : other_constraints_) {
+  for (auto* constraint : other_constraints_) {
     uint64_t mask = 0;
     if (constraint->field != nullptr) {
       int width = constraint->field->width;
@@ -343,7 +343,7 @@
 }
 
 absl::Status InstructionEncoding::AddSpecialization(
-    const std::string &name, InstructionEncoding *encoding) {
+    const std::string& name, InstructionEncoding* encoding) {
   if (specializations_.contains(name)) {
     format_->encoding_info()->error_listener()->semanticError(
         nullptr, absl::StrCat("Duplicate instruction specialization name '",
diff --git a/mpact/sim/decoder/instruction_encoding.h b/mpact/sim/decoder/instruction_encoding.h
index 6e7a246..4dcda6e 100644
--- a/mpact/sim/decoder/instruction_encoding.h
+++ b/mpact/sim/decoder/instruction_encoding.h
@@ -34,10 +34,10 @@
 // Helper struct to group the information of a constraint (either == or !=).
 struct Constraint {
   ConstraintType type;
-  Field *field = nullptr;
-  Overlay *overlay = nullptr;
-  Field *rhs_field = nullptr;
-  Overlay *rhs_overlay = nullptr;
+  Field* field = nullptr;
+  Overlay* overlay = nullptr;
+  Field* rhs_field = nullptr;
+  Overlay* rhs_overlay = nullptr;
   bool can_ignore = false;
   uint64_t value;
 };
@@ -50,9 +50,9 @@
  public:
   // Disable default constructor and assignment operator.
   InstructionEncoding() = delete;
-  InstructionEncoding(std::string name, Format *format);
-  InstructionEncoding(const InstructionEncoding &encoding);
-  InstructionEncoding &operator=(const InstructionEncoding &) = delete;
+  InstructionEncoding(std::string name, Format* format);
+  InstructionEncoding(const InstructionEncoding& encoding);
+  InstructionEncoding& operator=(const InstructionEncoding&) = delete;
   ~InstructionEncoding();
 
   // Add a constraint on a field/overlay (in the format associated with the
@@ -65,8 +65,8 @@
   // Add a constraint on a field/overlay (in the format associated with the
   // instruction) that compares against another field/overlay.
   absl::Status AddOtherConstraint(ConstraintType type,
-                                  const std::string &lhs_name,
-                                  const std::string &rhs_name);
+                                  const std::string& lhs_name,
+                                  const std::string& rhs_name);
 
   // Get the value of the constant bits in the instruction (as defined by the
   // equal constraints).
@@ -78,63 +78,63 @@
   // not equal constraints.
   uint64_t GetCombinedMask();
   // Add specialization to this encoding.
-  absl::Status AddSpecialization(const std::string &name,
-                                 InstructionEncoding *encoding);
+  absl::Status AddSpecialization(const std::string& name,
+                                 InstructionEncoding* encoding);
   bool HasSpecialization() const { return !specializations_.empty(); }
 
   // Accessors.
-  const std::string &name() const { return name_; }
-  const std::string &format_name() const { return format_name_; }
+  const std::string& name() const { return name_; }
+  const std::string& format_name() const { return format_name_; }
   // Return the vector of constraints on the values of this encoding. These
   // constraints determine the value that a masked set of bits have to be equal
   // to in order to match this encoding.
-  const std::vector<Constraint *> &equal_constraints() const {
+  const std::vector<Constraint*>& equal_constraints() const {
     return equal_constraints_;
   }
   // Additionally, overlays may add constant bits to field references. These
   // constraints have to be compared one by one after performing an overlay
   // extraction that adds in the bits as specified in the overlay. Thus, they
   // cannot be used in a simple mask and compare.
-  const std::vector<Constraint *> &equal_extracted_constraints() const {
+  const std::vector<Constraint*>& equal_extracted_constraints() const {
     return equal_extracted_constraints_;
   }
   // The vector of not-equal, greater, less, etc., constraints that have to be
   // satisfied for an instruction to match this encoding.
-  const std::vector<Constraint *> &other_constraints() const {
+  const std::vector<Constraint*>& other_constraints() const {
     return other_constraints_;
   }
 
-  const absl::btree_map<std::string, InstructionEncoding *> &specializations()
+  const absl::btree_map<std::string, InstructionEncoding*>& specializations()
       const {
     return specializations_;
   }
 
-  Format *format() const { return format_; }
+  Format* format() const { return format_; }
 
  private:
   // Internal helper to create and check a constraint.
-  absl::StatusOr<Constraint *> CreateConstraint(ConstraintType type,
-                                                std::string lhs_name,
-                                                std::string rhs_name);
+  absl::StatusOr<Constraint*> CreateConstraint(ConstraintType type,
+                                               std::string lhs_name,
+                                               std::string rhs_name);
 
-  absl::StatusOr<Constraint *> CreateConstraint(ConstraintType type,
-                                                std::string field_name,
-                                                int64_t value);
+  absl::StatusOr<Constraint*> CreateConstraint(ConstraintType type,
+                                               std::string field_name,
+                                               int64_t value);
   // Recomputes the masks and values.
   absl::Status ComputeMaskAndValue();
 
   std::string name_;
   std::string format_name_;
-  Format *format_ = nullptr;
-  std::vector<Constraint *> equal_constraints_;
-  std::vector<Constraint *> equal_extracted_constraints_;
-  std::vector<Constraint *> other_constraints_;
+  Format* format_ = nullptr;
+  std::vector<Constraint*> equal_constraints_;
+  std::vector<Constraint*> equal_extracted_constraints_;
+  std::vector<Constraint*> other_constraints_;
   bool mask_set_ = false;
   uint64_t mask_ = 0;
   uint64_t other_mask_ = 0;
   uint64_t extracted_mask_ = 0;
   uint64_t value_ = 0;
-  absl::btree_map<std::string, InstructionEncoding *> specializations_;
+  absl::btree_map<std::string, InstructionEncoding*> specializations_;
 };
 
 }  // namespace bin_format
diff --git a/mpact/sim/decoder/instruction_group.cc b/mpact/sim/decoder/instruction_group.cc
index 527c0f4..294a5da 100644
--- a/mpact/sim/decoder/instruction_group.cc
+++ b/mpact/sim/decoder/instruction_group.cc
@@ -42,7 +42,7 @@
 InstructionGroup::InstructionGroup(std::string name, int width,
                                    std::string format_name,
                                    std::string opcode_enum,
-                                   BinEncodingInfo *encoding_info)
+                                   BinEncodingInfo* encoding_info)
     : name_(name),
       width_(width),
       format_name_(format_name),
@@ -52,12 +52,12 @@
 }
 
 InstructionGroup::~InstructionGroup() {
-  for (auto *enc : encoding_vec_) {
+  for (auto* enc : encoding_vec_) {
     delete enc;
   }
   encoding_map_.clear();
   encoding_vec_.clear();
-  for (auto *group : encoding_group_vec_) {
+  for (auto* group : encoding_group_vec_) {
     delete group;
   }
   encoding_group_vec_.clear();
@@ -66,8 +66,8 @@
 // Add an instruction encoding into the current group. Check that the format
 // has the correct width, and that the format the encoding is defined in, or
 // derives from the format associated with the instruction group.
-InstructionEncoding *InstructionGroup::AddInstructionEncoding(
-    antlr4::Token *token, std::string name, Format *format) {
+InstructionEncoding* InstructionGroup::AddInstructionEncoding(
+    antlr4::Token* token, std::string name, Format* format) {
   if ((format != nullptr) &&
       ((format_ == nullptr) || (!format->IsDerivedFrom(format_)))) {
     encoding_info_->error_listener()->semanticError(
@@ -88,13 +88,13 @@
         token, absl::StrCat("Duplicate instruction opcode name '", name,
                             "' in group '", this->name(), "'."));
   }
-  auto *encoding = new InstructionEncoding(name, format);
+  auto* encoding = new InstructionEncoding(name, format);
   encoding_vec_.push_back(encoding);
   encoding_name_map_.insert(std::make_pair(name, encoding));
   return encoding;
 }
 
-void InstructionGroup::AddInstructionEncoding(InstructionEncoding *encoding) {
+void InstructionGroup::AddInstructionEncoding(InstructionEncoding* encoding) {
   if (encoding_name_map_.contains(encoding->name())) {
     encoding_info_->error_listener()->semanticWarning(
         nullptr, absl::StrCat("Duplicate instruction opcode name '",
@@ -113,13 +113,13 @@
   }
   // Insert the encodings into a map based on the mask value - grouping
   // instructions with the same mask.
-  for (auto *enc : encoding_vec_) {
+  for (auto* enc : encoding_vec_) {
     encoding_map_.insert(std::make_pair(enc->GetMask(), enc));
   }
   encoding_group_vec_.push_back(new EncodingGroup(this, 0));
-  for (auto &[unused, enc_ptr] : encoding_map_) {
+  for (auto& [unused, enc_ptr] : encoding_map_) {
     bool is_added = false;
-    for (auto *group : encoding_group_vec_) {
+    for (auto* group : encoding_group_vec_) {
       if (group->CanAddEncoding(enc_ptr)) {
         group->AddEncoding(enc_ptr);
         is_added = true;
@@ -132,21 +132,21 @@
       is_added = true;
     }
   }
-  for (auto *grp : encoding_group_vec_) {
+  for (auto* grp : encoding_group_vec_) {
     grp->AddSubGroups();
   }
 }
 
 // Check for encoding errors.
 void InstructionGroup::CheckEncodings() {
-  for (auto *enc_grp : encoding_group_vec_) {
+  for (auto* enc_grp : encoding_group_vec_) {
     enc_grp->CheckEncodings();
   }
 }
 
 absl::Status InstructionGroup::AddSpecialization(
-    const std::string &name, const std::string &parent_name,
-    InstructionEncoding *encoding) {
+    const std::string& name, const std::string& parent_name,
+    InstructionEncoding* encoding) {
   if (encoding_name_map_.contains(name)) {
     encoding_info_->error_listener()->semanticError(
         nullptr,
@@ -157,12 +157,12 @@
                      "' in group '", this->name(), "'."));
   }
   encoding_name_map_.insert(std::make_pair(name, encoding));
-  auto *parent_encoding = encoding_name_map_.at(parent_name);
+  auto* parent_encoding = encoding_name_map_.at(parent_name);
   return parent_encoding->AddSpecialization(name, encoding);
 }
 
 // Helper function used to sort the instruction group elements in a vector.
-static bool InstructionGroupLess(EncodingGroup *lhs, EncodingGroup *rhs) {
+static bool InstructionGroupLess(EncodingGroup* lhs, EncodingGroup* rhs) {
   uint64_t lhs_value = 0;
   uint64_t rhs_value = 0;
   if (lhs->parent() == nullptr) {
@@ -210,7 +210,7 @@
       format_->uint_type_name(), ") {\n  return std::make_pair(", opcode_enum_,
       "::kNone, FormatEnum::kNone);\n}\n\n");
   for (size_t i = 0; i < encoding_group_vec_.size(); i++) {
-    auto *grp = encoding_group_vec_[i];
+    auto* grp = encoding_group_vec_[i];
     std::string name = absl::StrCat(this->name(), "_", absl::Hex(i));
     grp->EmitInitializers(name, &initializers, opcode_enum_);
     grp->EmitDecoders(name, &declarations, &definitions, opcode_enum_);
@@ -242,8 +242,8 @@
 
 // Emit code to encode the instructions in the group.
 void InstructionGroup::GetInstructionEncodings(
-    absl::btree_map<std::string, std::tuple<uint64_t, int>> &encodings) {
-  for (auto *enc : encoding_vec_) {
+    absl::btree_map<std::string, std::tuple<uint64_t, int>>& encodings) {
+  for (auto* enc : encoding_vec_) {
     encodings.insert(std::make_pair(ToPascalCase(enc->name()),
                                     std::make_tuple(enc->GetValue(), width())));
   }
@@ -272,12 +272,12 @@
       break;
   }
   uint64_t common_mask = 0xffff'ffff'ffff'ffff;
-  for (auto &[key, unused] : encoding_map_) {
+  for (auto& [key, unused] : encoding_map_) {
     common_mask &= key;
   }
   absl::StrAppend(&output, "//   common bits: ", absl::Hex(common_mask, pad),
                   "\n");
-  for (auto *grp : encoding_group_vec_) {
+  for (auto* grp : encoding_group_vec_) {
     absl::StrAppend(&output, grp->DumpGroup("", "  "));
   }
   return output;
diff --git a/mpact/sim/decoder/instruction_group.h b/mpact/sim/decoder/instruction_group.h
index f235daa..943c1f5 100644
--- a/mpact/sim/decoder/instruction_group.h
+++ b/mpact/sim/decoder/instruction_group.h
@@ -43,12 +43,12 @@
  public:
   InstructionGroup() = default;
   InstructionGroup(std::string name, int width, std::string format_name,
-                   std::string opcode_enum, BinEncodingInfo *encoding_info);
+                   std::string opcode_enum, BinEncodingInfo* encoding_info);
   ~InstructionGroup();
 
-  InstructionEncoding *AddInstructionEncoding(antlr4::Token *token,
-                                              std::string name, Format *format);
-  void AddInstructionEncoding(InstructionEncoding *encoding);
+  InstructionEncoding* AddInstructionEncoding(antlr4::Token* token,
+                                              std::string name, Format* format);
+  void AddInstructionEncoding(InstructionEncoding* encoding);
   // Process the encodings in the group, partitioning them into subgroups
   // according to their opcode bits to make it easy to generate a hierarchical
   // decoding tree.
@@ -59,42 +59,42 @@
   std::tuple<std::string, std::string> EmitDecoderCode();
   // Collect the encodings for these instructions.
   void GetInstructionEncodings(
-      absl::btree_map<std::string, std::tuple<uint64_t, int>> &encodings);
+      absl::btree_map<std::string, std::tuple<uint64_t, int>>& encodings);
   // Return a string containing information about this instruction group and
   // how it has been partitioned across encoding groups.
   std::string WriteGroup();
   // Add a specialization to this instruction group.
-  absl::Status AddSpecialization(const std::string &name,
-                                 const std::string &parent_name,
-                                 InstructionEncoding *encoding);
+  absl::Status AddSpecialization(const std::string& name,
+                                 const std::string& parent_name,
+                                 InstructionEncoding* encoding);
 
   // Accessors.
-  const std::string &name() const { return name_; }
-  const std::string &format_name() const { return format_name_; }
-  const std::string &opcode_enum() const { return opcode_enum_; }
-  const std::vector<InstructionEncoding *> &encoding_vec() const {
+  const std::string& name() const { return name_; }
+  const std::string& format_name() const { return format_name_; }
+  const std::string& opcode_enum() const { return opcode_enum_; }
+  const std::vector<InstructionEncoding*>& encoding_vec() const {
     return encoding_vec_;
   }
   int width() const { return width_; }
-  BinEncodingInfo *encoding_info() const { return encoding_info_; }
-  const absl::flat_hash_map<std::string, InstructionEncoding *> &
+  BinEncodingInfo* encoding_info() const { return encoding_info_; }
+  const absl::flat_hash_map<std::string, InstructionEncoding*>&
   encoding_name_map() const {
     return encoding_name_map_;
   }
 
-  Format *format() const { return format_; }
+  Format* format() const { return format_; }
 
  private:
   std::string name_;
   int width_;
   std::string format_name_;
-  Format *format_;
+  Format* format_;
   std::string opcode_enum_;
-  BinEncodingInfo *encoding_info_;
-  std::vector<InstructionEncoding *> encoding_vec_;
-  absl::flat_hash_map<std::string, InstructionEncoding *> encoding_name_map_;
-  absl::btree_multimap<uint64_t, InstructionEncoding *> encoding_map_;
-  std::vector<EncodingGroup *> encoding_group_vec_;
+  BinEncodingInfo* encoding_info_;
+  std::vector<InstructionEncoding*> encoding_vec_;
+  absl::flat_hash_map<std::string, InstructionEncoding*> encoding_name_map_;
+  absl::btree_multimap<uint64_t, InstructionEncoding*> encoding_map_;
+  std::vector<EncodingGroup*> encoding_group_vec_;
 };
 
 }  // namespace bin_format
diff --git a/mpact/sim/decoder/instruction_set.cc b/mpact/sim/decoder/instruction_set.cc
index 287f9b8..710326d 100644
--- a/mpact/sim/decoder/instruction_set.cc
+++ b/mpact/sim/decoder/instruction_set.cc
@@ -38,12 +38,12 @@
 namespace machine_description {
 namespace instruction_set {
 
-absl::btree_set<std::string> *InstructionSet::attribute_names_ = nullptr;
+absl::btree_set<std::string>* InstructionSet::attribute_names_ = nullptr;
 
-static void EmitEnumNames(const absl::btree_set<std::string> &names,
+static void EmitEnumNames(const absl::btree_set<std::string>& names,
                           absl::string_view namespace_name,
-                          absl::string_view op_name, std::string &h_output,
-                          std::string &cc_output) {
+                          absl::string_view op_name, std::string& h_output,
+                          std::string& cc_output) {
   // Emit array of enum names.
   absl::StrAppend(&cc_output, "const char *k", op_name,
                   "Names[static_cast<int>(", op_name,
@@ -53,7 +53,7 @@
   absl::StrAppend(&h_output, "namespace ", namespace_name,
                   " {\n"
                   "  constexpr char kNoneName[] = \"none\";\n");
-  for (auto const &name : names) {
+  for (auto const& name : names) {
     absl::StrAppend(&h_output, "  constexpr char k", name, "Name[] = \"", name,
                     "\";\n");
     absl::StrAppend(&cc_output, "  ", namespace_name, "::k", name, "Name,\n");
@@ -74,41 +74,41 @@
 
 InstructionSet::~InstructionSet() {
   delete bundle_;
-  for (auto &[unused, bundle_ptr] : bundle_map_) {
+  for (auto& [unused, bundle_ptr] : bundle_map_) {
     delete bundle_ptr;
   }
-  for (auto &[unused, slot_ptr] : slot_map_) {
+  for (auto& [unused, slot_ptr] : slot_map_) {
     delete slot_ptr;
   }
   bundle_map_.clear();
   slot_map_.clear();
 }
 
-void InstructionSet::AddBundle(Bundle *bundle) {
+void InstructionSet::AddBundle(Bundle* bundle) {
   bundle_map_.insert({bundle->name(), bundle});
 }
 
-void InstructionSet::AddSlot(Slot *slot) {
+void InstructionSet::AddSlot(Slot* slot) {
   slot_map_.insert({slot->name(), slot});
 }
 
 // Lookup bundle and slot by name.
-Bundle *InstructionSet::GetBundle(absl::string_view bundle_name) const {
+Bundle* InstructionSet::GetBundle(absl::string_view bundle_name) const {
   auto iter = bundle_map_.find(bundle_name);
   if (iter == bundle_map_.end()) return nullptr;
   return iter->second;
 }
 
-Slot *InstructionSet::GetSlot(absl::string_view slot_name) const {
+Slot* InstructionSet::GetSlot(absl::string_view slot_name) const {
   auto iter = slot_map_.find(slot_name);
   if (iter == slot_map_.end()) return nullptr;
   return iter->second;
 }
 
 absl::Status InstructionSet::AnalyzeResourceUse() {
-  for (auto const *slot : slot_order_) {
-    for (auto &[unused, inst_ptr] : slot->instruction_map()) {
-      for (auto const *def : inst_ptr->resource_acquire_vec()) {
+  for (auto const* slot : slot_order_) {
+    for (auto& [unused, inst_ptr] : slot->instruction_map()) {
+      for (auto const* def : inst_ptr->resource_acquire_vec()) {
         if (def->begin_expression != nullptr) {
           auto result = def->begin_expression->GetValue();
           if (!result.ok()) return result.status();
@@ -128,38 +128,38 @@
 
 void InstructionSet::ComputeSlotAndBundleOrders() {
   // Compute order of slot definitions
-  for (auto const &[unused, slot_ptr] : slot_map_) {
+  for (auto const& [unused, slot_ptr] : slot_map_) {
     if (slot_ptr->is_marked()) continue;
     AddToSlotOrder(slot_ptr);
   }
 
   // Compute order of bundle definitions
-  for (auto const &[unused, bundle_ptr] : bundle_map_) {
+  for (auto const& [unused, bundle_ptr] : bundle_map_) {
     if (bundle_ptr->is_marked()) continue;
     AddToBundleOrder(bundle_ptr);
   }
 }
 
-void InstructionSet::AddToBundleOrder(Bundle *bundle) {
+void InstructionSet::AddToBundleOrder(Bundle* bundle) {
   if (bundle->is_marked()) return;
-  for (auto const &bundle_name : bundle->bundle_names()) {
-    Bundle *sub_bundle = bundle_map_[bundle_name];
+  for (auto const& bundle_name : bundle->bundle_names()) {
+    Bundle* sub_bundle = bundle_map_[bundle_name];
     AddToBundleOrder(sub_bundle);
   }
   bundle_order_.push_back(bundle);
   bundle->set_is_marked(true);
 }
 
-void InstructionSet::AddToSlotOrder(Slot *slot) {
+void InstructionSet::AddToSlotOrder(Slot* slot) {
   if (slot->is_marked()) return;
-  for (auto const &base_slot : slot->base_slots()) {
+  for (auto const& base_slot : slot->base_slots()) {
     AddToSlotOrder(slot_map_[base_slot.base->name()]);
   }
   slot->set_is_marked(true);
   slot_order_.push_back(slot);
 }
 
-void InstructionSet::AddAttributeName(const std::string &name) {
+void InstructionSet::AddAttributeName(const std::string& name) {
   if (attribute_names_ == nullptr) {
     attribute_names_ = new absl::btree_set<std::string>();
   }
@@ -302,11 +302,11 @@
   std::string factory_class_name = pascal_name() + "InstructionSetFactory";
 
   absl::StrAppend(&output, "class ", factory_class_name, ";\n");
-  for (auto const *slot : slot_order_) {
+  for (auto const* slot : slot_order_) {
     absl::StrAppend(&output, slot->GenerateClassDeclaration(encoding_type));
   }
 
-  for (auto const *bundle : bundle_order_) {
+  for (auto const* bundle : bundle_order_) {
     absl::StrAppend(&output, bundle->GenerateClassDeclaration(encoding_type));
   }
   // Generate factory class.
@@ -352,11 +352,11 @@
                   " *encoding);\n"
                   "\n"
                   " private:\n");
-  for (auto const &bundle_name : bundle_->bundle_names()) {
+  for (auto const& bundle_name : bundle_->bundle_names()) {
     absl::StrAppend(&output, "  std::unique_ptr<", ToPascalCase(bundle_name),
                     "Decoder> ", bundle_name, "_decoder_;\n");
   }
-  for (auto const &[slot_name, unused] : bundle_->slot_uses()) {
+  for (auto const& [slot_name, unused] : bundle_->slot_uses()) {
     absl::StrAppend(&output, "  std::unique_ptr<", ToPascalCase(slot_name),
                     "Slot> ", slot_name, "_decoder_;\n");
   }
@@ -374,7 +374,7 @@
 
   std::string class_name = pascal_name() + "InstructionSet";
   std::string factory_class_name = class_name + "Factory";
-  for (auto *slot : slot_order_) {
+  for (auto* slot : slot_order_) {
     absl::StrAppend(&output, slot->GenerateClassDefinition(encoding_type));
   }
   // Constructor.
@@ -382,11 +382,11 @@
                   "(ArchState *arch_state, ", factory_class_name,
                   "*factory) : \n"
                   "  arch_state_(arch_state) {\n");
-  for (auto const &bundle_name : bundle_->bundle_names()) {
+  for (auto const& bundle_name : bundle_->bundle_names()) {
     absl::StrAppend(&output, "  ", bundle_name, "_decoder_ = factory->Create",
                     ToPascalCase(bundle_name), "Decoder(arch_state_);\n");
   }
-  for (auto const &[slot_name, unused] : bundle_->slot_uses()) {
+  for (auto const& [slot_name, unused] : bundle_->slot_uses()) {
     absl::StrAppend(&output, "  ", slot_name, "_decoder_ = factory->Create",
                     ToPascalCase(slot_name), "Slot(arch_state_);\n");
   }
@@ -410,7 +410,7 @@
     absl::StrAppend(&output,
                     "  inst = new Instruction(address, arch_state_);\n");
     // Generate calls to each of the top level bundle Decode methods.
-    for (auto const &bundle_name : bundle_->bundle_names()) {
+    for (auto const& bundle_name : bundle_->bundle_names()) {
       absl::StrAppend(&output, "  tmp_inst = ", bundle_name,
                       "_decoder_->Decode(address, encoding);\n"
                       "  inst->AppendChild(tmp_inst);\n"
@@ -420,7 +420,7 @@
     }
   }
   // Generate calls to each of the top level slot Decode methods.
-  for (auto const &[slot_name, instance_vec] : bundle_->slot_uses()) {
+  for (auto const& [slot_name, instance_vec] : bundle_->slot_uses()) {
     std::string enum_name =
         absl::StrCat("SlotEnum::", "k", ToPascalCase(slot_name));
     if (instance_vec.empty()) {
@@ -473,14 +473,14 @@
   absl::StrAppend(&h_output,
                   "  enum class SlotEnum {\n"
                   "    kNone = 0,\n");
-  absl::btree_map<std::string, const Slot *> slots_by_name;
-  for (auto const *slot : slot_order_) {
+  absl::btree_map<std::string, const Slot*> slots_by_name;
+  for (auto const* slot : slot_order_) {
     if (slot->is_referenced()) {
       std::string name = slot->pascal_name();
       slots_by_name.emplace(name, slot);
     }
   }
-  for (auto const &[name, unused] : slots_by_name) {
+  for (auto const& [name, unused] : slots_by_name) {
     absl::StrAppend(&h_output, "    k", name, ",\n");
   }
   absl::StrAppend(&h_output, "  };\n\n");
@@ -493,23 +493,23 @@
   absl::btree_set<std::string> list_dest_operands;
   absl::btree_set<std::string> dest_latency;
   // Insert PascalCase operand names into the sets to select unique names.
-  for (auto const &[unused, slot] : slots_by_name) {
+  for (auto const& [unused, slot] : slots_by_name) {
     // Slot specific operands.
     absl::btree_set<std::string> slot_predicate_operands;
     absl::btree_set<std::string> slot_source_operands;
     absl::btree_set<std::string> slot_list_source_operands;
     absl::btree_set<std::string> slot_dest_operands;
     absl::btree_set<std::string> slot_list_dest_operands;
-    for (auto const &[unused, inst_ptr] : slot->instruction_map()) {
-      auto *inst = inst_ptr;
+    for (auto const& [unused, inst_ptr] : slot->instruction_map()) {
+      auto* inst = inst_ptr;
       while (inst != nullptr) {
-        auto *opcode = inst->opcode();
+        auto* opcode = inst->opcode();
         if (!opcode->predicate_op_name().empty()) {
           predicate_operands.insert(ToPascalCase(opcode->predicate_op_name()));
           slot_predicate_operands.insert(
               ToPascalCase(opcode->predicate_op_name()));
         }
-        for (auto const &source_op : opcode->source_op_vec()) {
+        for (auto const& source_op : opcode->source_op_vec()) {
           if (source_op.is_array) {
             list_source_operands.insert(ToPascalCase(source_op.name));
             slot_list_source_operands.insert(ToPascalCase(source_op.name));
@@ -518,7 +518,7 @@
             slot_source_operands.insert(ToPascalCase(source_op.name));
           }
         }
-        for (auto const *dest_op : opcode->dest_op_vec()) {
+        for (auto const* dest_op : opcode->dest_op_vec()) {
           if (dest_op->is_array()) {
             list_dest_operands.insert(dest_op->pascal_case_name());
             slot_list_dest_operands.insert(dest_op->pascal_case_name());
@@ -539,7 +539,7 @@
     absl::StrAppend(&h_output, "  enum class ", slot_name, "PredOpEnum {\n");
     int pred_count = 0;
     absl::StrAppend(&h_output, "    kNone = ", pred_count++, ",\n");
-    for (auto const &pred_name : slot_predicate_operands) {
+    for (auto const& pred_name : slot_predicate_operands) {
       pred_op_map_.insert({pred_name, pred_count});
       absl::StrAppend(&h_output, "    k", pred_name, " = ", pred_count++,
                       ",\n");
@@ -551,7 +551,7 @@
     absl::StrAppend(&h_output, "  enum class ", slot_name, "SourceOpEnum {\n");
     int src_count = 0;
     absl::StrAppend(&h_output, "    kNone = ", src_count++, ",\n");
-    for (auto const &source_name : slot_source_operands) {
+    for (auto const& source_name : slot_source_operands) {
       source_op_map_.insert({source_name, src_count});
       absl::StrAppend(&h_output, "    k", source_name, " = ", src_count++,
                       ",\n");
@@ -564,7 +564,7 @@
                     "ListSourceOpEnum {\n");
     int list_src_count = 0;
     absl::StrAppend(&h_output, "    kNone = ", list_src_count++, ",\n");
-    for (auto const &source_name : slot_list_source_operands) {
+    for (auto const& source_name : slot_list_source_operands) {
       list_source_op_map_.insert({source_name, list_src_count});
       absl::StrAppend(&h_output, "    k", source_name, " = ", list_src_count++,
                       ",\n");
@@ -576,7 +576,7 @@
     absl::StrAppend(&h_output, "  enum class ", slot_name, "DestOpEnum {\n");
     int dst_count = 0;
     absl::StrAppend(&h_output, "    kNone = ", dst_count++, ",\n");
-    for (auto const &dest_name : slot_dest_operands) {
+    for (auto const& dest_name : slot_dest_operands) {
       dest_op_map_.insert({dest_name, dst_count});
       absl::StrAppend(&h_output, "    k", dest_name, " = ", dst_count++, ",\n");
     }
@@ -588,7 +588,7 @@
                     "ListDestOpEnum {\n");
     int list_dst_count = 0;
     absl::StrAppend(&h_output, "    kNone = ", list_dst_count++, ",\n");
-    for (auto const &dest_name : slot_list_dest_operands) {
+    for (auto const& dest_name : slot_list_dest_operands) {
       list_dest_op_map_.insert({dest_name, list_dst_count});
       absl::StrAppend(&h_output, "    k", dest_name, " = ", list_dst_count++,
                       ",\n");
@@ -604,7 +604,7 @@
   absl::StrAppend(&h_output, "  enum class PredOpEnum {\n");
   int pred_count = 0;
   absl::StrAppend(&h_output, "    kNone = ", pred_count++, ",\n");
-  for (auto const &pred_name : predicate_operands) {
+  for (auto const& pred_name : predicate_operands) {
     pred_op_map_.insert({pred_name, pred_count});
     absl::StrAppend(&h_output, "    k", pred_name, " = ", pred_count++, ",\n");
   }
@@ -615,7 +615,7 @@
   absl::StrAppend(&h_output, "  enum class SourceOpEnum {\n");
   int src_count = 0;
   absl::StrAppend(&h_output, "    kNone = ", src_count++, ",\n");
-  for (auto const &source_name : source_operands) {
+  for (auto const& source_name : source_operands) {
     source_op_map_.insert({source_name, src_count});
     absl::StrAppend(&h_output, "    k", source_name, " = ", src_count++, ",\n");
   }
@@ -626,7 +626,7 @@
   absl::StrAppend(&h_output, "  enum class ListSourceOpEnum {\n");
   int list_src_count = 0;
   absl::StrAppend(&h_output, "    kNone = ", list_src_count++, ",\n");
-  for (auto const &source_name : list_source_operands) {
+  for (auto const& source_name : list_source_operands) {
     list_source_op_map_.insert({source_name, list_src_count});
     absl::StrAppend(&h_output, "    k", source_name, " = ", list_src_count++,
                     ",\n");
@@ -638,7 +638,7 @@
   absl::StrAppend(&h_output, "  enum class DestOpEnum {\n");
   int dst_count = 0;
   absl::StrAppend(&h_output, "    kNone = ", dst_count++, ",\n");
-  for (auto const &dest_name : dest_operands) {
+  for (auto const& dest_name : dest_operands) {
     dest_op_map_.insert({dest_name, dst_count});
     absl::StrAppend(&h_output, "    k", dest_name, " = ", dst_count++, ",\n");
   }
@@ -649,7 +649,7 @@
   absl::StrAppend(&h_output, "  enum class ListDestOpEnum {\n");
   int list_dst_count = 0;
   absl::StrAppend(&h_output, "    kNone = ", list_dst_count++, ",\n");
-  for (auto const &dest_name : list_dest_operands) {
+  for (auto const& dest_name : list_dest_operands) {
     list_dest_op_map_.insert({dest_name, list_dst_count});
     absl::StrAppend(&h_output, "    k", dest_name, " = ", list_dst_count++,
                     ",\n");
@@ -662,11 +662,11 @@
                   "  enum class OpcodeEnum {\n"
                   "    kNone = 0,\n");
   absl::btree_set<std::string> name_set;
-  for (auto const *opcode : opcode_factory_->opcode_vec()) {
+  for (auto const* opcode : opcode_factory_->opcode_vec()) {
     name_set.insert(opcode->pascal_name());
   }
   int opcode_value = 1;
-  for (auto const &name : name_set) {
+  for (auto const& name : name_set) {
     absl::StrAppend(&h_output, "    k", name, " = ", opcode_value++, ",\n");
   }
   absl::StrAppend(&h_output, "    kPastMaxValue = ", opcode_value, "\n");
@@ -687,7 +687,7 @@
                   "OpcodeEnum::kPastMaxValue)] = {\n"
                   "  kNoneName,\n");
   absl::StrAppend(&h_output, "  constexpr char kNoneName[] = \"none\";\n");
-  for (auto const &name : name_set) {
+  for (auto const& name : name_set) {
     absl::StrAppend(&h_output, "  constexpr char k", name, "Name[] = \"", name,
                     "\";\n");
     absl::StrAppend(&cc_output, "  k", name, "Name,\n");
@@ -702,12 +702,12 @@
                   "    kNone = 0,\n");
   int resource_count = 1;
   name_set.clear();
-  for (auto const &[unused, resource_ptr] : resource_factory_->resource_map()) {
+  for (auto const& [unused, resource_ptr] : resource_factory_->resource_map()) {
     if (resource_ptr->is_simple()) {
       name_set.insert(resource_ptr->pascal_name());
     }
   }
-  for (auto const &name : name_set) {
+  for (auto const& name : name_set) {
     absl::StrAppend(&h_output, "    k", name, " = ", resource_count++, ",\n");
   }
   absl::StrAppend(&h_output, "    kPastMaxValue = ", resource_count,
@@ -720,12 +720,12 @@
                   "    kNone = 0,\n");
   resource_count = 1;
   name_set.clear();
-  for (auto const &[unused, resource_ptr] : resource_factory_->resource_map()) {
+  for (auto const& [unused, resource_ptr] : resource_factory_->resource_map()) {
     if (!resource_ptr->is_simple() && !resource_ptr->is_array()) {
       name_set.insert(resource_ptr->pascal_name());
     }
   }
-  for (auto const &name : name_set) {
+  for (auto const& name : name_set) {
     absl::StrAppend(&h_output, "    k", name, " = ", resource_count++, ",\n");
   }
   absl::StrAppend(&h_output, "    kPastMaxValue = ", resource_count,
@@ -738,12 +738,12 @@
                   "    kNone = 0,\n");
   resource_count = 1;
   name_set.clear();
-  for (auto const &[unused, resource_ptr] : resource_factory_->resource_map()) {
+  for (auto const& [unused, resource_ptr] : resource_factory_->resource_map()) {
     if (!resource_ptr->is_simple() && resource_ptr->is_array()) {
       name_set.insert(resource_ptr->pascal_name());
     }
   }
-  for (auto const &name : name_set) {
+  for (auto const& name : name_set) {
     absl::StrAppend(&h_output, "    k", name, " = ", resource_count++, ",\n");
   }
   absl::StrAppend(&h_output, "    kPastMaxValue = ", resource_count,
@@ -754,7 +754,7 @@
   absl::StrAppend(&h_output, "  enum class AttributeEnum {\n");
   int attribute_count = 0;
   if (InstructionSet::attribute_names_ != nullptr) {
-    for (auto const &name : *InstructionSet::attribute_names_) {
+    for (auto const& name : *InstructionSet::attribute_names_) {
       absl::StrAppend(&h_output, "    k", ToPascalCase(name), " = ",
                       attribute_count++, ",\n");
     }
@@ -766,8 +766,8 @@
 }
 
 std::string InstructionSet::GenerateOperandEncoder(
-    int position, absl::string_view op_name, const OperandLocator &locator,
-    const Opcode *opcode) const {
+    int position, absl::string_view op_name, const OperandLocator& locator,
+    const Opcode* opcode) const {
   std::string output;
   switch (locator.type) {
     case OperandLocator::kPredicate: {
@@ -931,10 +931,10 @@
       "&, ResolverInterface *, std::vector<RelocationInfo> &);\n"
       "EncodeFcn encode_fcns[] = {\n"
       "  EncodeNone,\n");
-  for (auto &[name, inst_ptr] : instruction_map_) {
+  for (auto& [name, inst_ptr] : instruction_map_) {
     std::string prefix;
     std::string suffix;
-    auto *opcode = inst_ptr->opcode();
+    auto* opcode = inst_ptr->opcode();
     absl::StrAppend(&array, "  Encode", opcode->pascal_name(), ",\n");
     absl::StrAppend(&prefix, "absl::StatusOr<std::tuple<uint64_t, int>> Encode",
                     opcode->pascal_name(), "(\n     ", encoder,
@@ -951,8 +951,8 @@
                     "  auto [encoding, bit_size] = res_opcode.value();\n"
                     "  absl::StatusOr<uint64_t> result;\n");
     int position = 0;
-    for (auto const *disasm_format : inst_ptr->disasm_format_vec()) {
-      for (auto const *format_info : disasm_format->format_info_vec) {
+    for (auto const* disasm_format : inst_ptr->disasm_format_vec()) {
+      for (auto const* format_info : disasm_format->format_info_vec) {
         if (format_info->op_name.empty()) continue;
         auto iter = opcode->op_locator_map().find(format_info->op_name);
         if (iter == opcode->op_locator_map().end()) {
@@ -1001,7 +1001,7 @@
       "};\n\n");
 
   // Generate the regex matchers for each slot.
-  for (auto *slot : slot_order_) {
+  for (auto* slot : slot_order_) {
     if (!slot->is_referenced()) continue;
     auto [h_slot, cc_slot] = slot->GenerateAsmRegexMatcher();
     absl::StrAppend(&h_output, h_slot);
diff --git a/mpact/sim/decoder/instruction_set.h b/mpact/sim/decoder/instruction_set.h
index 0db705c..a1a2efc 100644
--- a/mpact/sim/decoder/instruction_set.h
+++ b/mpact/sim/decoder/instruction_set.h
@@ -52,14 +52,14 @@
   virtual ~InstructionSet();
 
   // Add bundle and slot to instruction set.
-  void AddBundle(Bundle *bundle);
-  void AddSlot(Slot *slot);
+  void AddBundle(Bundle* bundle);
+  void AddSlot(Slot* slot);
   void PrependNamespace(absl::string_view namespace_name);
 
   // Look up bundle and slot names and return pointers to their respective
   // objects. If not found, return nullptr.
-  Bundle *GetBundle(absl::string_view) const;
-  Slot *GetSlot(absl::string_view) const;
+  Bundle* GetBundle(absl::string_view) const;
+  Slot* GetSlot(absl::string_view) const;
   // Compute the set of reachable bundles and slots.
   void ComputeSlotAndBundleOrders();
   // Analyze the resource use in the opcodes in the slots. This is done to
@@ -80,40 +80,40 @@
   // defined.
   StringPair GenerateEnums(absl::string_view file_name);
 
-  static void AddAttributeName(const std::string &name);
+  static void AddAttributeName(const std::string& name);
 
-  void AddInstruction(Instruction *inst) {
+  void AddInstruction(Instruction* inst) {
     if (instruction_map_.contains(inst->opcode()->name())) return;
     instruction_map_.emplace(inst->opcode()->name(), inst);
   }
 
   // Getters and setters.
-  std::vector<std::string> &namespaces() { return namespaces_; }
-  const std::string &name() const { return name_; }
-  const std::string &pascal_name() const { return pascal_name_; }
-  void set_bundle(Bundle *bundle) { bundle_ = bundle; }
-  Bundle *bundle() { return bundle_; }
-  OpcodeFactory *opcode_factory() const { return opcode_factory_.get(); }
-  ResourceFactory *resource_factory() const { return resource_factory_.get(); }
+  std::vector<std::string>& namespaces() { return namespaces_; }
+  const std::string& name() const { return name_; }
+  const std::string& pascal_name() const { return pascal_name_; }
+  void set_bundle(Bundle* bundle) { bundle_ = bundle; }
+  Bundle* bundle() { return bundle_; }
+  OpcodeFactory* opcode_factory() const { return opcode_factory_.get(); }
+  ResourceFactory* resource_factory() const { return resource_factory_.get(); }
   // Attribute names are shared across the isa's.
-  static const absl::btree_set<std::string> *attribute_names() {
+  static const absl::btree_set<std::string>* attribute_names() {
     return attribute_names_;
   }
-  absl::flat_hash_map<std::string, Bundle *> &bundle_map() {
+  absl::flat_hash_map<std::string, Bundle*>& bundle_map() {
     return bundle_map_;
   }
-  absl::flat_hash_map<std::string, Slot *> &slot_map() { return slot_map_; }
+  absl::flat_hash_map<std::string, Slot*>& slot_map() { return slot_map_; }
 
   // Maps from operand names to enum values.
-  absl::flat_hash_map<std::string, int> &pred_op_map() { return pred_op_map_; }
-  absl::flat_hash_map<std::string, int> &source_op_map() {
+  absl::flat_hash_map<std::string, int>& pred_op_map() { return pred_op_map_; }
+  absl::flat_hash_map<std::string, int>& source_op_map() {
     return source_op_map_;
   }
-  absl::flat_hash_map<std::string, int> &list_source_op_map() {
+  absl::flat_hash_map<std::string, int>& list_source_op_map() {
     return list_source_op_map_;
   }
-  absl::flat_hash_map<std::string, int> &dest_op_map() { return dest_op_map_; }
-  absl::flat_hash_map<std::string, int> &list_dest_op_map() {
+  absl::flat_hash_map<std::string, int>& dest_op_map() { return dest_op_map_; }
+  absl::flat_hash_map<std::string, int>& list_dest_op_map() {
     return list_dest_op_map_;
   }
 
@@ -121,28 +121,28 @@
 
  private:
   std::string GenerateOperandEncoder(int position, absl::string_view op_name,
-                                     const OperandLocator &locator,
-                                     const Opcode *opcode) const;
+                                     const OperandLocator& locator,
+                                     const Opcode* opcode) const;
   // Add bundle and slot to list of classes that need to be generated.
-  void AddToBundleOrder(Bundle *);
-  void AddToSlotOrder(Slot *);
+  void AddToBundleOrder(Bundle*);
+  void AddToSlotOrder(Slot*);
   // Data members.
   std::vector<std::string> namespaces_;
-  std::vector<Slot *> slot_order_;
-  std::vector<Bundle *> bundle_order_;
+  std::vector<Slot*> slot_order_;
+  std::vector<Bundle*> bundle_order_;
   std::unique_ptr<OpcodeFactory> opcode_factory_;
   std::unique_ptr<ResourceFactory> resource_factory_;
   std::string name_;
   // Name in PascalCase.
   std::string pascal_name_;
-  Bundle *bundle_ = nullptr;
+  Bundle* bundle_ = nullptr;
   // Map from instruction name to pointer.
-  absl::btree_map<std::string, Instruction *> instruction_map_;
+  absl::btree_map<std::string, Instruction*> instruction_map_;
   // Maps from names to bundle/slot pointers.
-  absl::flat_hash_map<std::string, Bundle *> bundle_map_;
-  absl::flat_hash_map<std::string, Slot *> slot_map_;
+  absl::flat_hash_map<std::string, Bundle*> bundle_map_;
+  absl::flat_hash_map<std::string, Slot*> slot_map_;
   // Attribute name list - shared across all the isas.
-  static absl::btree_set<std::string> *attribute_names_;
+  static absl::btree_set<std::string>* attribute_names_;
   // Maps from operand names to enum values.
   absl::flat_hash_map<std::string, int> pred_op_map_;
   absl::flat_hash_map<std::string, int> source_op_map_;
diff --git a/mpact/sim/decoder/instruction_set_visitor.cc b/mpact/sim/decoder/instruction_set_visitor.cc
index ed68626..fd5d6f5 100644
--- a/mpact/sim/decoder/instruction_set_visitor.cc
+++ b/mpact/sim/decoder/instruction_set_visitor.cc
@@ -57,7 +57,7 @@
 namespace instruction_set {
 
 static absl::StatusOr<TemplateValue> AbsoluteValueTemplateFunc(
-    TemplateInstantiationArgs *args) {
+    TemplateInstantiationArgs* args) {
   if (args->size() != 1) {
     return absl::InternalError(absl::StrCat(
         "Wrong number of arguments, expected 1, was given ", args->size()));
@@ -65,7 +65,7 @@
   auto result = (*args)[0]->GetValue();
   if (!result.ok()) return result.status();
 
-  auto *value_ptr = std::get_if<int>(&result.value());
+  auto* value_ptr = std::get_if<int>(&result.value());
   if (value_ptr == nullptr) {
     return absl::InternalError("Type mismatch - int expected");
   }
@@ -79,22 +79,22 @@
 }
 
 InstructionSetVisitor::~InstructionSetVisitor() {
-  for (auto &[unused, expr_ptr] : constant_map_) {
+  for (auto& [unused, expr_ptr] : constant_map_) {
     delete expr_ptr;
   }
   constant_map_.clear();
-  for (auto *wrapper : antlr_parser_wrappers_) {
+  for (auto* wrapper : antlr_parser_wrappers_) {
     delete wrapper;
   }
   antlr_parser_wrappers_.clear();
-  for (auto *expr : disasm_field_widths_) delete expr;
+  for (auto* expr : disasm_field_widths_) delete expr;
   disasm_field_widths_.clear();
 }
 
 // Main entry point for processing the file.
 absl::Status InstructionSetVisitor::Process(
-    const std::vector<std::string> &file_names, const std::string &prefix,
-    const std::string &isa_name, const std::vector<std::string> &include_roots,
+    const std::vector<std::string>& file_names, const std::string& prefix,
+    const std::string& isa_name, const std::vector<std::string>& include_roots,
     absl::string_view directory) {
   generator_version_ = absl::GetFlag(FLAGS_generator);
   // Create and add the error listener.
@@ -104,12 +104,12 @@
     return absl::InvalidArgumentError("Isa name cannot be empty");
   }
 
-  for (auto &include_root : include_roots) {
+  for (auto& include_root : include_roots) {
     include_dir_vec_.push_back(include_root);
   }
 
   std::string isa_prefix = prefix;
-  std::istream *source_stream = &std::cin;
+  std::istream* source_stream = &std::cin;
 
   if (!file_names.empty()) {
     source_stream = new std::fstream(file_names[0], std::fstream::in);
@@ -122,7 +122,7 @@
   parser_wrapper.parser()->addErrorListener(error_listener());
 
   // Parse the file and then create the data structures.
-  TopLevelCtx *top_level = parser_wrapper.parser()->top_level();
+  TopLevelCtx* top_level = parser_wrapper.parser()->top_level();
 
   if (!file_names.empty()) {
     delete source_stream;
@@ -241,20 +241,20 @@
 }
 
 void InstructionSetVisitor::PerformBundleReferenceChecks(
-    InstructionSet *instruction_set, Bundle *bundle) {
+    InstructionSet* instruction_set, Bundle* bundle) {
   // Verify that all referenced bundles were declared.
-  for (const auto &bundle_name : bundle->bundle_names()) {
-    Bundle *bundle_ref = instruction_set->GetBundle(bundle_name);
+  for (const auto& bundle_name : bundle->bundle_names()) {
+    Bundle* bundle_ref = instruction_set->GetBundle(bundle_name);
     // Perform the check recursively on the referenced bundles.
     PerformBundleReferenceChecks(instruction_set, bundle_ref);
   }
   // Verify that all the slot uses were declared.
-  for (auto &[slot_name, instance_vec] : bundle->slot_uses()) {
-    Slot *slot = instruction_set->GetSlot(slot_name);
+  for (auto& [slot_name, instance_vec] : bundle->slot_uses()) {
+    Slot* slot = instruction_set->GetSlot(slot_name);
     // Verify that the instance number of the slot falls within valid range.
-    for (auto &instance_number : instance_vec) {
+    for (auto& instance_number : instance_vec) {
       if (instance_number >= slot->size()) {
-        auto *token = bundle->ctx() == nullptr ? nullptr : bundle->ctx()->start;
+        auto* token = bundle->ctx() == nullptr ? nullptr : bundle->ctx()->start;
         error_listener()->semanticError(
             token,
             absl::StrCat("Index ", instance_number, " out of range for slot ",
@@ -276,14 +276,14 @@
   instruction_set->ComputeSlotAndBundleOrders();
 }
 
-void InstructionSetVisitor::VisitTopLevel(TopLevelCtx *ctx) {
+void InstructionSetVisitor::VisitTopLevel(TopLevelCtx* ctx) {
   auto declarations = ctx->declaration();
 
   // Process disasm widths. Only the one in the top level file is used if there
   // are additional ones in included files.
   int count = 0;
-  DisasmWidthsCtx *disasm_ctx = nullptr;
-  for (auto *decl : declarations) {
+  DisasmWidthsCtx* disasm_ctx = nullptr;
+  for (auto* decl : declarations) {
     context_file_map_[decl] = current_file_index_;
     if (decl->disasm_widths() == nullptr) continue;
     if (count > 0) {
@@ -319,14 +319,14 @@
 }
 
 void InstructionSetVisitor::PreProcessDeclarations(
-    const std::vector<DeclarationCtx *> &ctx_vec) {
-  std::vector<IncludeFileCtx *> include_files;
+    const std::vector<DeclarationCtx*>& ctx_vec) {
+  std::vector<IncludeFileCtx*> include_files;
   // Get handles to the slot, bundle and isa declarations.
 
   // Create map from slot name to slot ctx.
-  for (auto *decl : ctx_vec) {
+  for (auto* decl : ctx_vec) {
     if (decl->slot_declaration() != nullptr) {
-      auto *slot_ctx = decl->slot_declaration();
+      auto* slot_ctx = decl->slot_declaration();
       context_file_map_.insert({slot_ctx, current_file_index_});
       auto name = slot_ctx->slot_name->getText();
       auto ptr = slot_decl_map_.find(name);
@@ -341,7 +341,7 @@
     }
     // Create map from bundle name to bundle ctx.
     if (decl->bundle_declaration() != nullptr) {
-      auto *bundle_ctx = decl->bundle_declaration();
+      auto* bundle_ctx = decl->bundle_declaration();
       context_file_map_.insert({bundle_ctx, current_file_index_});
       auto name = bundle_ctx->bundle_name->getText();
       auto ptr = bundle_decl_map_.find(name);
@@ -357,7 +357,7 @@
     }
     // Create map from isa name to isa ctx.
     if (decl->isa_declaration() != nullptr) {
-      auto *isa_ctx = decl->isa_declaration();
+      auto* isa_ctx = decl->isa_declaration();
       context_file_map_.insert({isa_ctx, current_file_index_});
       auto name = isa_ctx->instruction_set_name->getText();
       auto ptr = isa_decl_map_.find(name);
@@ -374,7 +374,7 @@
 
     // Process global include file specifications.
     if (decl->include_file_list() != nullptr) {
-      for (auto *include_file : decl->include_file_list()->include_file()) {
+      for (auto* include_file : decl->include_file_list()->include_file()) {
         // Insert the string - the call will always succeed, but the insertion
         // does not happen if it already exists.
         include_files_.insert(include_file->STRING_LITERAL()->getText());
@@ -394,13 +394,13 @@
   }
   // Process all include files - this adds to all isa, slot and bundle
   // context maps, as well as all global variables, etc.
-  for (auto *include_file_ctx : include_files) {
+  for (auto* include_file_ctx : include_files) {
     VisitIncludeFile(include_file_ctx);
   }
 }
 
 std::unique_ptr<InstructionSet> InstructionSetVisitor::VisitIsaDeclaration(
-    IsaDeclCtx *ctx) {
+    IsaDeclCtx* ctx) {
   if (ctx == nullptr) return nullptr;
   auto instruction_set =
       std::make_unique<InstructionSet>(ctx->instruction_set_name->getText());
@@ -418,16 +418,16 @@
   return instruction_set;
 }
 
-void InstructionSetVisitor::VisitNamespaceDecl(NamespaceDeclCtx *ctx,
-                                               InstructionSet *isa) {
+void InstructionSetVisitor::VisitNamespaceDecl(NamespaceDeclCtx* ctx,
+                                               InstructionSet* isa) {
   if (ctx == nullptr) return;
-  for (auto *namespace_name : ctx->namespace_ident()) {
+  for (auto* namespace_name : ctx->namespace_ident()) {
     isa->namespaces().push_back(namespace_name->getText());
   }
 }
 
-void InstructionSetVisitor::VisitBundleList(BundleListCtx *ctx,
-                                            Bundle *bundle) {
+void InstructionSetVisitor::VisitBundleList(BundleListCtx* ctx,
+                                            Bundle* bundle) {
   if (ctx == nullptr) return;
   // Append the list of named bundles referenced within the containing bundle.
   auto bundle_specs_vec = ctx->bundle_spec();
@@ -449,7 +449,7 @@
   }
 }
 
-void InstructionSetVisitor::VisitSlotList(SlotListCtx *ctx, Bundle *bundle) {
+void InstructionSetVisitor::VisitSlotList(SlotListCtx* ctx, Bundle* bundle) {
   if (ctx == nullptr) return;
   // Append the list of named slots referenced within the containing bundle.
   auto slot_specs_vec = ctx->slot_spec();
@@ -473,7 +473,7 @@
   }
 }
 
-std::vector<int> InstructionSetVisitor::VisitArraySpec(ArraySpecCtx *ctx) {
+std::vector<int> InstructionSetVisitor::VisitArraySpec(ArraySpecCtx* ctx) {
   std::vector<int> instances;
 
   // If there are not array specifications, return the empty vector.
@@ -496,12 +496,12 @@
   return instances;
 }
 
-void InstructionSetVisitor::VisitConstantDef(ConstantDefCtx *ctx) {
+void InstructionSetVisitor::VisitConstantDef(ConstantDefCtx* ctx) {
   if (ctx == nullptr) return;
   std::string ident = ctx->ident()->getText();
   std::string type = ctx->template_parameter_type()->getText();
   context_file_map_.insert({ctx->expression(), context_file_map_.at(ctx)});
-  auto *expr = VisitExpression(ctx->expression(), nullptr, nullptr);
+  auto* expr = VisitExpression(ctx->expression(), nullptr, nullptr);
   auto status = AddConstant(ident, type, expr);
   if (!status.ok()) {
     delete expr;
@@ -509,14 +509,14 @@
   }
 }
 
-void InstructionSetVisitor::VisitIncludeFile(IncludeFileCtx *ctx) {
+void InstructionSetVisitor::VisitIncludeFile(IncludeFileCtx* ctx) {
   // The literal includes the double quotes.
   std::string literal = ctx->STRING_LITERAL()->getText();
   // Remove the double quotes from the literal and construct the full file
   // name.
   std::string file_name = literal.substr(1, literal.length() - 2);
   // Check for recursive include.
-  for (auto const &name : include_file_stack_) {
+  for (auto const& name : include_file_stack_) {
     if (name == file_name) {
       error_listener()->semanticError(
           ctx->start,
@@ -528,14 +528,14 @@
 }
 
 void InstructionSetVisitor::ParseIncludeFile(
-    antlr4::ParserRuleContext *ctx, const std::string &file_name,
-    const std::vector<std::string> &dirs) {
+    antlr4::ParserRuleContext* ctx, const std::string& file_name,
+    const std::vector<std::string>& dirs) {
   std::fstream include_file;
   // Open include file.
   include_file.open(file_name, std::fstream::in);
   if (!include_file.is_open()) {
     // Try each of the include file directories.
-    for (auto const &dir : dirs) {
+    for (auto const& dir : dirs) {
       std::string include_name = dir + "/" + file_name;
       include_file.open(include_name, std::fstream::in);
       if (include_file.is_open()) break;
@@ -553,7 +553,7 @@
   file_names_.push_back(file_name);
   current_file_index_ = file_names_.size() - 1;
   // Create an antlr4 stream from the input stream.
-  auto *include_parser = new IsaAntlrParserWrapper(&include_file);
+  auto* include_parser = new IsaAntlrParserWrapper(&include_file);
   // We need to save the parser state so it's available for analysis after
   // we are done with building the parse trees.
   antlr_parser_wrappers_.push_back(include_parser);
@@ -577,16 +577,16 @@
 }
 
 void InstructionSetVisitor::VisitBundleDeclaration(
-    BundleDeclCtx *ctx, InstructionSet *instruction_set) {
+    BundleDeclCtx* ctx, InstructionSet* instruction_set) {
   if (ctx == nullptr) return;
-  Bundle *bundle =
+  Bundle* bundle =
       new Bundle(ctx->bundle_name->getText(), instruction_set, ctx);
   instruction_set->AddBundle(bundle);
   int num_slot_lists = 0;
   int num_bundle_lists = 0;
   int num_include_file_lists = 0;
   int num_semfunc_specs = 0;
-  for (auto *part : ctx->bundle_parts()) {
+  for (auto* part : ctx->bundle_parts()) {
     if (part->slot_list() != nullptr) {
       if (num_slot_lists > 0) {
         error_listener()->semanticError(file_names_[context_file_map_.at(ctx)],
@@ -618,7 +618,7 @@
             "Multiple include file lists in bundle");
         return;
       }
-      for (auto *include_file : part->include_file_list()->include_file()) {
+      for (auto* include_file : part->include_file_list()->include_file()) {
         // Insert the string - the call will always succeed, but the insertion
         // does not happen if it already exists.
         include_files_.insert(include_file->STRING_LITERAL()->getText());
@@ -649,12 +649,12 @@
 }
 
 void InstructionSetVisitor::VisitSlotDeclaration(
-    SlotDeclCtx *ctx, InstructionSet *instruction_set) {
+    SlotDeclCtx* ctx, InstructionSet* instruction_set) {
   bool is_templated = ctx->template_decl() != nullptr;
-  Slot *slot = new Slot(ctx->slot_name->getText(), instruction_set,
+  Slot* slot = new Slot(ctx->slot_name->getText(), instruction_set,
                         is_templated, ctx, generator_version_);
   if (is_templated) {
-    for (auto const &param : ctx->template_decl()->template_parameter_decl()) {
+    for (auto const& param : ctx->template_decl()->template_parameter_decl()) {
       auto status = slot->AddTemplateFormal(param->IDENT()->getText());
       if (!status.ok()) {
         error_listener()->semanticError(
@@ -666,7 +666,7 @@
   // Set the base slot if it inherits.
   if (ctx->base_item_list() != nullptr) {
     // For each entry in the list of slots to derive from.
-    for (auto *base_item : ctx->base_item_list()->base_item()) {
+    for (auto* base_item : ctx->base_item_list()->base_item()) {
       std::string base_name = base_item->IDENT()->getText();
       // If the base slot does has not been seen - undefined error.
       auto slot_iter = slot_decl_map_.find(base_name);
@@ -677,14 +677,14 @@
         continue;
       }
       // If the slot hasn't been visited, visit it.
-      auto *base = instruction_set->GetSlot(base_name);
+      auto* base = instruction_set->GetSlot(base_name);
       if (base == nullptr) {
         VisitSlotDeclaration(slot_iter->second, instruction_set);
         base = instruction_set->GetSlot(base_name);
       }
       // Now check if the base slot is templated or not, and if the template
       // arguments are present or not.
-      auto *template_spec = base_item->template_spec();
+      auto* template_spec = base_item->template_spec();
       if ((template_spec != nullptr) && !base->is_templated()) {
         // Template arguments are present but the slot isn't templated.
         error_listener()->semanticError(
@@ -713,10 +713,10 @@
         }
         bool has_error = false;
         // Build up the argument vector.
-        auto *arguments = new TemplateInstantiationArgs;
-        for (auto *template_arg : template_spec->expression()) {
+        auto* arguments = new TemplateInstantiationArgs;
+        for (auto* template_arg : template_spec->expression()) {
           context_file_map_.insert({template_arg, context_file_map_.at(ctx)});
-          auto *expr = VisitExpression(template_arg, slot, nullptr);
+          auto* expr = VisitExpression(template_arg, slot, nullptr);
           if (expr == nullptr) {
             error_listener()->semanticError(
                 file_names_[context_file_map_.at(ctx)], template_arg->start,
@@ -727,7 +727,7 @@
           arguments->push_back(expr);
         }
         if (has_error) {
-          for (auto *expr : *arguments) {
+          for (auto* expr : *arguments) {
             delete expr;
           }
           delete arguments;
@@ -757,7 +757,7 @@
   }
   // Add the slot to the ISA.
   instruction_set->AddSlot(slot);
-  for (auto *decl_ctx : ctx->const_and_default_decl()) {
+  for (auto* decl_ctx : ctx->const_and_default_decl()) {
     context_file_map_[decl_ctx] = context_file_map_.at(ctx);
     VisitConstAndDefaultDecls(decl_ctx, slot);
   }
@@ -765,10 +765,10 @@
   VisitOpcodeList(ctx->opcode_list(), slot);
 }
 
-void InstructionSetVisitor::VisitDisasmWidthsDecl(DisasmWidthsCtx *ctx) {
-  for (auto *expr : ctx->expression()) {
+void InstructionSetVisitor::VisitDisasmWidthsDecl(DisasmWidthsCtx* ctx) {
+  for (auto* expr : ctx->expression()) {
     context_file_map_.insert({expr, context_file_map_.at(ctx)});
-    auto *width_expr = VisitExpression(expr, nullptr, nullptr);
+    auto* width_expr = VisitExpression(expr, nullptr, nullptr);
     if ((width_expr == nullptr) || (!width_expr->IsConstant())) {
       error_listener()->semanticError(expr->start,
                                       "Expression must be constant");
@@ -778,17 +778,17 @@
   }
 }
 
-void InstructionSetVisitor::VisitConstAndDefaultDecls(ConstAndDefaultCtx *ctx,
-                                                      Slot *slot) {
+void InstructionSetVisitor::VisitConstAndDefaultDecls(ConstAndDefaultCtx* ctx,
+                                                      Slot* slot) {
   if (ctx == nullptr) return;
   // A constant declaration.
-  auto *const_def = ctx->constant_def();
+  auto* const_def = ctx->constant_def();
   if (const_def != nullptr) {  // Constant declaration.
     std::string ident = const_def->ident()->getText();
     std::string type = const_def->template_parameter_type()->getText();
     context_file_map_.insert(
         {const_def->expression(), context_file_map_.at(ctx)});
-    auto *expr = VisitExpression(const_def->expression(), slot, nullptr);
+    auto* expr = VisitExpression(const_def->expression(), slot, nullptr);
     if (expr == nullptr) {
       delete expr;
       error_listener()->semanticError(file_names_[context_file_map_.at(ctx)],
@@ -812,7 +812,7 @@
   }
   if (ctx->LATENCY() != nullptr) {  // Default latency.
     context_file_map_.insert({ctx->expression(), context_file_map_.at(ctx)});
-    auto *expr = VisitExpression(ctx->expression(), slot, nullptr);
+    auto* expr = VisitExpression(ctx->expression(), slot, nullptr);
     if (expr == nullptr) {
       delete expr;
       error_listener()->semanticError(file_names_[context_file_map_.at(ctx)],
@@ -832,7 +832,7 @@
   }
   // Add any include files to our set of includes.
   if (ctx->include_file_list() != nullptr) {
-    for (auto *include_file : ctx->include_file_list()->include_file()) {
+    for (auto* include_file : ctx->include_file_list()->include_file()) {
       // Insert the string - the call will always succeed, but the insertion
       // does not happen if it already exists.
       include_files_.insert(include_file->STRING_LITERAL()->getText());
@@ -847,11 +847,11 @@
           "Multiple definitions of 'default' opcode");
       return;
     }
-    auto *default_instruction = new Instruction(
+    auto* default_instruction = new Instruction(
         slot->instruction_set()->opcode_factory()->CreateDefaultOpcode(), slot);
     bool has_disasm = false;
     bool has_semfunc = false;
-    for (auto *attribute : ctx->opcode_attribute_list()->opcode_attribute()) {
+    for (auto* attribute : ctx->opcode_attribute_list()->opcode_attribute()) {
       // Disasm spec.
       if (attribute->disasm_spec() != nullptr) {
         if (has_disasm) {
@@ -861,7 +861,7 @@
           continue;
         }
         has_disasm = true;
-        for (auto *format_str : attribute->disasm_spec()->STRING_LITERAL()) {
+        for (auto* format_str : attribute->disasm_spec()->STRING_LITERAL()) {
           std::string format = format_str->getText();
           // Trim the double quotes.
           format.erase(format.size() - 1, 1);
@@ -924,13 +924,13 @@
 // Visit the template argument recursively to create an expression tree that
 // can be evaluated later. No need to coalesce constant expression trees, the
 // savings aren't that great.
-TemplateExpression *InstructionSetVisitor::VisitExpression(ExpressionCtx *ctx,
-                                                           Slot *slot,
-                                                           Instruction *inst) {
+TemplateExpression* InstructionSetVisitor::VisitExpression(ExpressionCtx* ctx,
+                                                           Slot* slot,
+                                                           Instruction* inst) {
   if (ctx == nullptr) return nullptr;
   if (ctx->negop() != nullptr) {
     context_file_map_.insert({ctx->expr, context_file_map_.at(ctx)});
-    TemplateExpression *expr = VisitExpression(ctx->expr, slot, inst);
+    TemplateExpression* expr = VisitExpression(ctx->expr, slot, inst);
     if (expr == nullptr) return nullptr;
     return new TemplateNegate(expr);
   }
@@ -938,10 +938,10 @@
   if (ctx->mulop() != nullptr) {
     std::string op = ctx->mulop()->getText();
     context_file_map_.insert({ctx->lhs, context_file_map_.at(ctx)});
-    TemplateExpression *lhs = VisitExpression(ctx->lhs, slot, inst);
+    TemplateExpression* lhs = VisitExpression(ctx->lhs, slot, inst);
     if (lhs == nullptr) return nullptr;
     context_file_map_.insert({ctx->rhs, context_file_map_.at(ctx)});
-    TemplateExpression *rhs = VisitExpression(ctx->rhs, slot, inst);
+    TemplateExpression* rhs = VisitExpression(ctx->rhs, slot, inst);
     if (rhs == nullptr) {
       delete lhs;
       return nullptr;
@@ -953,10 +953,10 @@
   if (ctx->addop() != nullptr) {
     std::string op = ctx->addop()->getText();
     context_file_map_.insert({ctx->lhs, context_file_map_.at(ctx)});
-    TemplateExpression *lhs = VisitExpression(ctx->lhs, slot, inst);
+    TemplateExpression* lhs = VisitExpression(ctx->lhs, slot, inst);
     if (lhs == nullptr) return nullptr;
     context_file_map_.insert({ctx->rhs, context_file_map_.at(ctx)});
-    TemplateExpression *rhs = VisitExpression(ctx->rhs, slot, inst);
+    TemplateExpression* rhs = VisitExpression(ctx->rhs, slot, inst);
     if (rhs == nullptr) {
       delete lhs;
       return nullptr;
@@ -982,11 +982,11 @@
                        " parameters, but ", ctx->expression().size(),
                        " were given"));
     }
-    auto *args = new TemplateInstantiationArgs;
+    auto* args = new TemplateInstantiationArgs;
     bool has_error = false;
-    for (auto *expr_ctx : ctx->expression()) {
+    for (auto* expr_ctx : ctx->expression()) {
       context_file_map_.insert({expr_ctx, context_file_map_.at(ctx)});
-      auto *expr = VisitExpression(expr_ctx, slot, inst);
+      auto* expr = VisitExpression(expr_ctx, slot, inst);
       if (expr == nullptr) {
         has_error = true;
         break;
@@ -994,7 +994,7 @@
       args->push_back(expr);
     }
     if (has_error) {
-      for (auto *expr : *args) {
+      for (auto* expr : *args) {
         delete expr;
       }
       delete args;
@@ -1009,7 +1009,7 @@
   }
 
   if (ctx->NUMBER() != nullptr) {
-    auto *expr =
+    auto* expr =
         new TemplateConstant(std::stoi(ctx->NUMBER()->getText(), nullptr, 0));
     return expr;
   }
@@ -1019,11 +1019,11 @@
     // Four possibilities. A global constant, a slot local constant, a
     // template formal, or a reference to a destination operand.
     if (slot != nullptr) {
-      TemplateFormal *param = slot->GetTemplateFormal(ident);
+      TemplateFormal* param = slot->GetTemplateFormal(ident);
       if (param != nullptr) return new TemplateParam(param);
 
       // Check if it's a slot const expression.
-      auto *expr = slot->GetConstExpression(ident);
+      auto* expr = slot->GetConstExpression(ident);
       if (expr != nullptr) return expr->DeepCopy();
     }
 
@@ -1031,7 +1031,7 @@
     // destination operand with a latency. That is the value/expression that
     // is needed here.
     if (inst != nullptr) {
-      auto *op = inst->GetDestOp(ident);
+      auto* op = inst->GetDestOp(ident);
       if (op == nullptr) {
         error_listener()->semanticError(
             file_names_[context_file_map_.at(ctx)], ctx->start,
@@ -1041,7 +1041,7 @@
         return nullptr;
       }
 
-      auto *expr = op->expression();
+      auto* expr = op->expression();
       if (expr != nullptr) return expr->DeepCopy();
 
       // expr is null, this means that the destination operand has a decode
@@ -1054,7 +1054,7 @@
       return nullptr;
     }
 
-    auto *expr = GetConstExpression(ident);
+    auto* expr = GetConstExpression(ident);
     if (expr != nullptr) return expr->DeepCopy();
 
     error_listener()->semanticError(
@@ -1066,8 +1066,8 @@
   return nullptr;
 }
 
-DestinationOperand *InstructionSetVisitor::FindDestinationOpInExpression(
-    ExpressionCtx *ctx, const Slot *slot, const Instruction *inst) {
+DestinationOperand* InstructionSetVisitor::FindDestinationOpInExpression(
+    ExpressionCtx* ctx, const Slot* slot, const Instruction* inst) {
   if (ctx == nullptr) return nullptr;
   if (ctx->negop() != nullptr) {
     context_file_map_.insert({ctx->expr, context_file_map_.at(ctx)});
@@ -1076,8 +1076,8 @@
   if ((ctx->mulop() != nullptr) || (ctx->addop() != nullptr)) {
     context_file_map_.insert({ctx->lhs, context_file_map_.at(ctx)});
     context_file_map_.insert({ctx->rhs, context_file_map_.at(ctx)});
-    auto *lhs = FindDestinationOpInExpression(ctx->lhs, slot, inst);
-    auto *rhs = FindDestinationOpInExpression(ctx->rhs, slot, inst);
+    auto* lhs = FindDestinationOpInExpression(ctx->lhs, slot, inst);
+    auto* rhs = FindDestinationOpInExpression(ctx->rhs, slot, inst);
     if (lhs == nullptr) return rhs;
     if (rhs == nullptr) return lhs;
     if (lhs == rhs) return lhs;
@@ -1096,9 +1096,9 @@
     return nullptr;
   }
   if (ctx->func != nullptr) {
-    DestinationOperand *dest_op = nullptr;
-    DestinationOperand *tmp_op;
-    for (auto *expr_ctx : ctx->expression()) {
+    DestinationOperand* dest_op = nullptr;
+    DestinationOperand* tmp_op;
+    for (auto* expr_ctx : ctx->expression()) {
       context_file_map_.insert({expr_ctx, context_file_map_.at(ctx)});
       tmp_op = FindDestinationOpInExpression(expr_ctx, slot, inst);
       if (dest_op == nullptr) {
@@ -1119,19 +1119,19 @@
   std::string ident = ctx->IDENT()->getText();
   // It is either a slot local constant, a template formal, or a reference
   // to a destination operand.
-  TemplateFormal *param = slot->GetTemplateFormal(ident);
+  TemplateFormal* param = slot->GetTemplateFormal(ident);
   if (param != nullptr) return nullptr;
   // Check if it's a slot const expression.
-  auto *expr = slot->GetConstExpression(ident);
+  auto* expr = slot->GetConstExpression(ident);
   if (expr != nullptr) return nullptr;
   // It should be an opcode operand term.
   return inst->GetDestOp(ident);
 }
 
-void InstructionSetVisitor::VisitOpcodeList(OpcodeListCtx *ctx, Slot *slot) {
+void InstructionSetVisitor::VisitOpcodeList(OpcodeListCtx* ctx, Slot* slot) {
   absl::flat_hash_set<std::string> deleted_ops_set;
-  absl::flat_hash_set<OpcodeSpecCtx *> overridden_ops_set;
-  std::vector<Instruction *> instruction_vec;
+  absl::flat_hash_set<OpcodeSpecCtx*> overridden_ops_set;
+  std::vector<Instruction*> instruction_vec;
   if (ctx != nullptr) {
     ProcessOpcodeList(ctx, slot, instruction_vec, deleted_ops_set,
                       overridden_ops_set);
@@ -1140,12 +1140,12 @@
   // to the current slot. When adding the instruction, pass in any template
   // instantiation arguments to the base slot so that any expressions for
   // destination operand latencies can be evaluated.
-  for (auto const &base_slot : slot->base_slots()) {
+  for (auto const& base_slot : slot->base_slots()) {
     if (base_slot.base->min_instruction_size() < slot->min_instruction_size()) {
       slot->set_min_instruction_size(base_slot.base->min_instruction_size());
     }
     // Copy over the instructions that were not deleted.
-    for (auto &[unused, inst_ptr] : base_slot.base->instruction_map()) {
+    for (auto& [unused, inst_ptr] : base_slot.base->instruction_map()) {
       if (!deleted_ops_set.contains(inst_ptr->opcode()->name())) {
         absl::Status status =
             slot->AppendInheritedInstruction(inst_ptr, base_slot.arguments);
@@ -1160,7 +1160,7 @@
     PerformOpcodeOverrides(overridden_ops_set, slot);
   }
   // Add the declared opcodes.
-  for (auto *inst : instruction_vec) {
+  for (auto* inst : instruction_vec) {
     absl::Status status = slot->AppendInstruction(inst);
     if (!status.ok()) {
       error_listener()->semanticError(file_names_[context_file_map_.at(ctx)],
@@ -1170,17 +1170,17 @@
 }
 
 void InstructionSetVisitor::PerformOpcodeOverrides(
-    absl::flat_hash_set<OpcodeSpecCtx *> overridden_ops_set, Slot *slot) {
-  for (auto *override_ctx : overridden_ops_set) {
+    absl::flat_hash_set<OpcodeSpecCtx*> overridden_ops_set, Slot* slot) {
+  for (auto* override_ctx : overridden_ops_set) {
     std::string name = override_ctx->name->getText();
-    auto *inst = slot->instruction_map().at(name);
+    auto* inst = slot->instruction_map().at(name);
     VisitOpcodeAttributes(override_ctx->opcode_attribute_list(), inst, slot);
   }
 }
 
-void InstructionSetVisitor::VisitOpcodeAttributes(OpcodeAttributeListCtx *ctx,
-                                                  Instruction *inst,
-                                                  Slot *slot) {
+void InstructionSetVisitor::VisitOpcodeAttributes(OpcodeAttributeListCtx* ctx,
+                                                  Instruction* inst,
+                                                  Slot* slot) {
   if (ctx == nullptr) return;
   // These flags are used to detect multiple instances of each attribute.
   bool has_disasm = false;
@@ -1188,7 +1188,7 @@
   bool has_resources = false;
   bool has_attributes = false;
   // Visit the opcode attributes.
-  for (auto *attribute_ctx : ctx->opcode_attribute()) {
+  for (auto* attribute_ctx : ctx->opcode_attribute()) {
     // Process any disassembly specifications.
     if (attribute_ctx->disasm_spec() != nullptr) {
       // In case of override, need to clear any disasm info in instruction.
@@ -1201,7 +1201,7 @@
         continue;
       }
       has_disasm = true;
-      for (auto *disasm_fmt : attribute_ctx->disasm_spec()->STRING_LITERAL()) {
+      for (auto* disasm_fmt : attribute_ctx->disasm_spec()->STRING_LITERAL()) {
         std::string format = disasm_fmt->getText();
         // Trim the double quotes.
         format.erase(format.size() - 1, 1);
@@ -1277,9 +1277,9 @@
 }
 
 void InstructionSetVisitor::VisitInstructionAttributeList(
-    InstructionAttributeListCtx *ctx, Slot *slot, Instruction *inst) {
-  absl::flat_hash_map<std::string, TemplateExpression *> attributes;
-  for (auto *attribute : ctx->instruction_attribute()) {
+    InstructionAttributeListCtx* ctx, Slot* slot, Instruction* inst) {
+  absl::flat_hash_map<std::string, TemplateExpression*> attributes;
+  for (auto* attribute : ctx->instruction_attribute()) {
     std::string name = attribute->IDENT()->getText();
     if (attributes.find(name) != attributes.end()) {
       error_listener()->semanticError(
@@ -1291,7 +1291,7 @@
     if (attribute->expression() != nullptr) {
       context_file_map_.insert(
           {attribute->expression(), context_file_map_.at(slot->ctx())});
-      auto *expr = VisitExpression(attribute->expression(), slot, inst);
+      auto* expr = VisitExpression(attribute->expression(), slot, inst);
       attributes.emplace(name, expr);
       continue;
     }
@@ -1299,8 +1299,8 @@
   }
   // Are we parsing attributes for an instruction?
   if (inst != nullptr) {
-    for (auto *child = inst; child != nullptr; child = child->child()) {
-      for (auto &[name, expr] : attributes) {
+    for (auto* child = inst; child != nullptr; child = child->child()) {
+      for (auto& [name, expr] : attributes) {
         child->AddInstructionAttribute(name, expr);
       }
     }
@@ -1309,18 +1309,18 @@
     return;
   }
   // Attributes are default attributes for the current slot.
-  for (auto &[name, expr] : attributes) {
+  for (auto& [name, expr] : attributes) {
     slot->AddInstructionAttribute(name, expr);
   }
   attributes.clear();
 }
 
-void InstructionSetVisitor::VisitSemfuncSpec(SemfuncSpecCtx *semfunc_spec,
-                                             Instruction *inst) {
-  auto *child = inst;
+void InstructionSetVisitor::VisitSemfuncSpec(SemfuncSpecCtx* semfunc_spec,
+                                             Instruction* inst) {
+  auto* child = inst;
   // Parse each string in the list of semantic function specifications. There
   // should be one the opcode and one for each child opcode.
-  for (auto *sem_func : semfunc_spec->STRING_LITERAL()) {
+  for (auto* sem_func : semfunc_spec->STRING_LITERAL()) {
     if (child == nullptr) {
       error_listener()->semanticWarning(
           file_names_[context_file_map_.at(inst->slot()->ctx())],
@@ -1342,9 +1342,9 @@
   }
 }
 
-void InstructionSetVisitor::VisitResourceDetails(ResourceDetailsCtx *ctx,
-                                                 Instruction *inst,
-                                                 Slot *slot) {
+void InstructionSetVisitor::VisitResourceDetails(ResourceDetailsCtx* ctx,
+                                                 Instruction* inst,
+                                                 Slot* slot) {
   if (ctx->ident() != nullptr) {
     // This is a reference to a resource spec defined earlier.
     std::string name = ctx->ident()->getText();
@@ -1361,22 +1361,22 @@
   }
   ResourceSpec spec;
   VisitResourceDetailsLists(ctx, slot, inst, &spec);
-  for (auto *use : spec.use_vec) {
+  for (auto* use : spec.use_vec) {
     inst->AppendResourceUse(use);
   }
-  for (auto *acquire : spec.acquire_vec) {
+  for (auto* acquire : spec.acquire_vec) {
     inst->AppendResourceAcquire(acquire);
   }
 }
 
-std::optional<ResourceReference *>
+std::optional<ResourceReference*>
 InstructionSetVisitor::ProcessResourceReference(
-    Slot *slot, Instruction *inst, ResourceItemCtx *resource_item) {
+    Slot* slot, Instruction* inst, ResourceItemCtx* resource_item) {
   // Empty optional object.
-  std::optional<ResourceReference *> return_value;
+  std::optional<ResourceReference*> return_value;
 
-  auto *factory = slot->instruction_set()->resource_factory();
-  DestinationOperand *dest_op = nullptr;
+  auto* factory = slot->instruction_set()->resource_factory();
+  DestinationOperand* dest_op = nullptr;
   // Extract the text from the resource reference.
   std::string ident_text;
   bool is_array;
@@ -1390,12 +1390,12 @@
     is_array = true;
   }
   dest_op = inst->GetDestOp(ident_text);
-  auto *resource = factory->GetOrInsertResource(ident_text);
+  auto* resource = factory->GetOrInsertResource(ident_text);
   resource->set_is_array(is_array);
   // Compute begin and end values.
-  TemplateExpression *begin_expr;
-  TemplateExpression *end_expr;
-  DestinationOperand *tmp_op;
+  TemplateExpression* begin_expr;
+  TemplateExpression* end_expr;
+  DestinationOperand* tmp_op;
   if (resource_item->begin_cycle == nullptr) {
     begin_expr = new TemplateConstant(0);
   } else {
@@ -1450,15 +1450,15 @@
         {resource_item->end_cycle, context_file_map_.at(slot->ctx())});
     end_expr = VisitExpression(resource_item->end_cycle, slot, inst);
   }
-  auto *ref =
+  auto* ref =
       new ResourceReference(resource, is_array, dest_op, begin_expr, end_expr);
-  return std::optional<ResourceReference *>(ref);
+  return std::optional<ResourceReference*>(ref);
 }
 
-void InstructionSetVisitor::VisitResourceDetailsLists(ResourceDetailsCtx *ctx,
-                                                      Slot *slot,
-                                                      Instruction *inst,
-                                                      ResourceSpec *spec) {
+void InstructionSetVisitor::VisitResourceDetailsLists(ResourceDetailsCtx* ctx,
+                                                      Slot* slot,
+                                                      Instruction* inst,
+                                                      ResourceSpec* spec) {
   if (ctx == nullptr) return;
 
   if ((ctx->use_list == nullptr) && (ctx->acquire_list == nullptr) &&
@@ -1474,9 +1474,9 @@
   // set of cycles specified.
 
   // Use list.
-  auto *use_list = ctx->use_list;
+  auto* use_list = ctx->use_list;
   if (use_list != nullptr) {
-    for (auto *resource_item : use_list->resource_item()) {
+    for (auto* resource_item : use_list->resource_item()) {
       auto ref_optional = ProcessResourceReference(slot, inst, resource_item);
       if (!ref_optional) continue;
       spec->use_vec.push_back(ref_optional.value());
@@ -1484,14 +1484,14 @@
   }
 
   // Reserve list.
-  auto *acquire_list = ctx->acquire_list;
+  auto* acquire_list = ctx->acquire_list;
   if (acquire_list != nullptr) {
-    for (auto *resource_item : acquire_list->resource_item()) {
+    for (auto* resource_item : acquire_list->resource_item()) {
       auto ref_optional = ProcessResourceReference(slot, inst, resource_item);
       if (!ref_optional) continue;
       // Only add to use_vec if it isn't already there.
       bool found = false;
-      for (auto *ref : spec->use_vec) {
+      for (auto* ref : spec->use_vec) {
         if (ref->resource->name() == ref_optional.value()->resource->name()) {
           found = true;
           break;
@@ -1505,9 +1505,9 @@
   }
 
   // Hold list.
-  auto *hold_list = ctx->hold_list;
+  auto* hold_list = ctx->hold_list;
   if (hold_list != nullptr) {
-    for (auto *resource_item : hold_list->resource_item()) {
+    for (auto* resource_item : hold_list->resource_item()) {
       auto ref_optional = ProcessResourceReference(slot, inst, resource_item);
       if (!ref_optional) continue;
       spec->acquire_vec.push_back(ref_optional.value());
@@ -1516,23 +1516,23 @@
 }
 
 void InstructionSetVisitor::ProcessOpcodeList(
-    OpcodeListCtx *ctx, Slot *slot, std::vector<Instruction *> &instruction_vec,
-    absl::flat_hash_set<std::string> &deleted_ops_set,
-    absl::flat_hash_set<OpcodeSpecCtx *> &overridden_ops_set) {
+    OpcodeListCtx* ctx, Slot* slot, std::vector<Instruction*>& instruction_vec,
+    absl::flat_hash_set<std::string>& deleted_ops_set,
+    absl::flat_hash_set<OpcodeSpecCtx*>& overridden_ops_set) {
   // Obtain the list of opcodes specifications.
   auto opcode_spec = ctx->opcode_spec();
-  for (auto *opcode_ctx : opcode_spec) {
+  for (auto* opcode_ctx : opcode_spec) {
     ProcessOpcodeSpec(opcode_ctx, slot, instruction_vec, deleted_ops_set,
                       overridden_ops_set);
   }
 }
 
 void InstructionSetVisitor::ProcessOpcodeSpec(
-    OpcodeSpecCtx *opcode_ctx, Slot *slot,
-    std::vector<Instruction *> &instruction_vec,
-    absl::flat_hash_set<std::string> &deleted_ops_set,
-    absl::flat_hash_set<OpcodeSpecCtx *> &overridden_ops_set) {
-  auto *opcode_factory = slot->instruction_set()->opcode_factory();
+    OpcodeSpecCtx* opcode_ctx, Slot* slot,
+    std::vector<Instruction*>& instruction_vec,
+    absl::flat_hash_set<std::string>& deleted_ops_set,
+    absl::flat_hash_set<OpcodeSpecCtx*>& overridden_ops_set) {
+  auto* opcode_factory = slot->instruction_set()->opcode_factory();
   if (opcode_ctx->generate != nullptr) {
     auto status = ProcessOpcodeGenerator(opcode_ctx, slot, instruction_vec,
                                          deleted_ops_set, overridden_ops_set);
@@ -1556,7 +1556,7 @@
     }
     bool found = false;
     // Check to see if one of the base slots has this opcode.
-    for (auto const &base_slot : slot->base_slots()) {
+    for (auto const& base_slot : slot->base_slots()) {
       found |= base_slot.base->HasInstruction(opcode_name);
       if (found) break;
     }
@@ -1576,7 +1576,7 @@
   // "attributes" (semantic function, disasm, etc.) are changed.
   if (opcode_ctx->overridden != nullptr) {
     int found = 0;
-    for (auto const &base_slot : slot->base_slots()) {
+    for (auto const& base_slot : slot->base_slots()) {
       found += base_slot.base->HasInstruction(opcode_name);
     }
     // Check that the opcode is indeed inherited from one base class only.
@@ -1599,7 +1599,7 @@
   }
 
   // This is a new opcode, so let's create it. Signal failure if error.
-  absl::StatusOr<Opcode *> result = opcode_factory->CreateOpcode(opcode_name);
+  absl::StatusOr<Opcode*> result = opcode_factory->CreateOpcode(opcode_name);
   if (!result.ok()) {
     error_listener()->semanticError(
         file_names_[context_file_map_.at(slot->ctx())], opcode_ctx->name,
@@ -1607,7 +1607,7 @@
     return;
   }
 
-  Opcode *top = result.value();
+  Opcode* top = result.value();
   auto inst = new Instruction(top, slot);
   slot->instruction_set()->AddInstruction(inst);
 
@@ -1626,7 +1626,7 @@
   int op_spec_number = 0;
   auto op_spec = opcode_ctx->operand_spec();
   // Process the top instruction.
-  for (auto &[name, expr] : slot->attribute_map()) {
+  for (auto& [name, expr] : slot->attribute_map()) {
     inst->AddInstructionAttribute(name, expr->DeepCopy());
   }
 
@@ -1642,19 +1642,19 @@
 
   // If there are child instructions process them.
   if (opcode_ctx->operand_spec()->opcode_operands_list() != nullptr) {
-    Opcode *parent = top;
+    Opcode* parent = top;
     auto opcode_operands = op_spec->opcode_operands_list()->opcode_operands();
 
-    Instruction *child_inst = nullptr;
+    Instruction* child_inst = nullptr;
     // Process child instructions.
     for (size_t i = 1; i < opcode_operands.size(); ++i) {
       // Create child opcode.
-      auto *op = opcode_factory->CreateChildOpcode(parent);
+      auto* op = opcode_factory->CreateChildOpcode(parent);
       // Create child instruction.
       child_inst = new Instruction(op, slot);
       inst->AppendChild(child_inst);
       // Add default attributes.
-      for (auto &[name, expr] : slot->attribute_map()) {
+      for (auto& [name, expr] : slot->attribute_map()) {
         child_inst->AddInstructionAttribute(name, expr->DeepCopy());
       }
       VisitOpcodeOperands(opcode_operands[i], op_spec_number, inst, child_inst,
@@ -1666,11 +1666,11 @@
   VisitOpcodeAttributes(opcode_ctx->opcode_attribute_list(), inst, slot);
 }
 
-void InstructionSetVisitor::VisitOpcodeOperands(OpcodeOperandsCtx *ctx,
+void InstructionSetVisitor::VisitOpcodeOperands(OpcodeOperandsCtx* ctx,
                                                 int op_spec_number,
-                                                Instruction *parent,
-                                                Instruction *child,
-                                                Slot *slot) {
+                                                Instruction* parent,
+                                                Instruction* child,
+                                                Slot* slot) {
   if (ctx == nullptr) return;
   if (ctx->pred != nullptr) {
     std::string name = ctx->pred->getText();
@@ -1681,7 +1681,7 @@
   }
   if (ctx->source != nullptr) {
     int instance = 0;
-    for (auto *source_op : ctx->source->source_operand()) {
+    for (auto* source_op : ctx->source->source_operand()) {
       std::string name;
       bool is_array = false;
       bool is_reloc = false;
@@ -1711,7 +1711,7 @@
   }
   if (ctx->dest_list() != nullptr) {
     int instance = 0;
-    for (auto *dest_op : ctx->dest_list()->dest_operand()) {
+    for (auto* dest_op : ctx->dest_list()->dest_operand()) {
       std::string ident;
       bool is_array = false;
       bool is_reloc = false;
@@ -1759,20 +1759,20 @@
 }
 
 absl::Status InstructionSetVisitor::ProcessOpcodeGenerator(
-    OpcodeSpecCtx *ctx, Slot *slot, std::vector<Instruction *> &instruction_vec,
-    absl::flat_hash_set<std::string> &deleted_ops_set,
-    absl::flat_hash_set<OpcodeSpecCtx *> &overridden_ops_set) {
+    OpcodeSpecCtx* ctx, Slot* slot, std::vector<Instruction*>& instruction_vec,
+    absl::flat_hash_set<std::string>& deleted_ops_set,
+    absl::flat_hash_set<OpcodeSpecCtx*>& overridden_ops_set) {
   if (ctx == nullptr) return absl::InternalError("OpcodeSpecCtx is null");
   absl::flat_hash_set<std::string> range_variable_names;
-  std::vector<RangeAssignmentInfo *> range_info_vec;
+  std::vector<RangeAssignmentInfo*> range_info_vec;
   // Process range assignment lists. The range assignment is either a single
   // value or a structured binding assignment. If it's a binding assignment we
   // need to make sure each tuple has the same number of values as there are
   // idents to assign them to.
-  for (auto *assign_ctx : ctx->range_assignment()) {
-    auto *range_info = new RangeAssignmentInfo();
+  for (auto* assign_ctx : ctx->range_assignment()) {
+    auto* range_info = new RangeAssignmentInfo();
     range_info_vec.push_back(range_info);
-    for (auto *ident_ctx : assign_ctx->IDENT()) {
+    for (auto* ident_ctx : assign_ctx->IDENT()) {
       std::string name = ident_ctx->getText();
       if (range_variable_names.contains(name)) {
         error_listener()->semanticError(
@@ -1795,7 +1795,7 @@
     }
     // See if it's a list of simple values.
     if (!assign_ctx->gen_value().empty()) {
-      for (auto *gen_value_ctx : assign_ctx->gen_value()) {
+      for (auto* gen_value_ctx : assign_ctx->gen_value()) {
         if (gen_value_ctx->simple != nullptr) {
           range_info->range_values[0].push_back(
               gen_value_ctx->simple->getText());
@@ -1809,9 +1809,9 @@
       continue;
     }
     // It's a list of tuples with a structured binding assignment.
-    for (auto *tuple_ctx : assign_ctx->tuple()) {
+    for (auto* tuple_ctx : assign_ctx->tuple()) {
       if (tuple_ctx->gen_value().size() != range_info->range_names.size()) {
-        for (auto *info : range_info_vec) delete info;
+        for (auto* info : range_info_vec) delete info;
         return absl::InternalError(
             "Number of values differs from number of identifiers");
       }
@@ -1848,7 +1848,7 @@
     pos = input_text.find_first_of('$', start_pos);
   }
   if (error_listener()->HasError()) {
-    for (auto *info : range_info_vec) delete info;
+    for (auto* info : range_info_vec) delete info;
     return absl::InternalError("Found undefined binding variable name(s)");
   }
   // Now we need to iterate over the range_info instances and substitution
@@ -1856,25 +1856,25 @@
   std::string generated_text =
       GenerateOpcodeSpec(range_info_vec, 0, input_text);
   // Parse and process the generated text.
-  auto *parser = new IsaAntlrParserWrapper(generated_text);
+  auto* parser = new IsaAntlrParserWrapper(generated_text);
   antlr_parser_wrappers_.push_back(parser);
   // Parse the text starting at the opcode_spec_list rule.
   auto opcode_spec_vec = parser->parser()->opcode_spec_list()->opcode_spec();
   // Process the opcode spec.
-  for (auto *opcode_spec : opcode_spec_vec) {
+  for (auto* opcode_spec : opcode_spec_vec) {
     ProcessOpcodeSpec(opcode_spec, slot, instruction_vec, deleted_ops_set,
                       overridden_ops_set);
   }
   // Clean up.
-  for (auto *info : range_info_vec) delete info;
+  for (auto* info : range_info_vec) delete info;
   return absl::OkStatus();
 }
 
 // Helper function to recursively generate the text for the GENERATE opcode
 // spec.
 std::string InstructionSetVisitor::GenerateOpcodeSpec(
-    const std::vector<RangeAssignmentInfo *> &range_info_vec, int index,
-    const std::string &template_str_in) const {
+    const std::vector<RangeAssignmentInfo*>& range_info_vec, int index,
+    const std::string& template_str_in) const {
   std::string generated;
   // Iterate for the number of values.
   for (int i = 0; i < range_info_vec[index]->range_values[0].size(); ++i) {
@@ -1884,7 +1884,7 @@
     // current set of values.
     int var_index = 0;
     int replace_count = 0;
-    for (auto &re : range_info_vec[index]->range_regexes) {
+    for (auto& re : range_info_vec[index]->range_regexes) {
       replace_count += RE2::GlobalReplace(
           &template_str, re,
           range_info_vec[index]->range_values[var_index++][i]);
@@ -1928,18 +1928,18 @@
 }
 // This method parses the disasm format string.
 absl::Status InstructionSetVisitor::ParseDisasmFormat(std::string format,
-                                                      Instruction *inst) {
+                                                      Instruction* inst) {
   std::string::size_type pos = 0;
   std::string::size_type prev = 0;
   std::string::size_type length = format.size();
-  FormatInfo *format_info = nullptr;
+  FormatInfo* format_info = nullptr;
   // Extract raw text without (between) the '%' specifiers.
-  DisasmFormat *disasm_fmt = new DisasmFormat();
+  DisasmFormat* disasm_fmt = new DisasmFormat();
   while ((pos != std::string::npos) &&
          ((pos = format.find_first_of('%', pos)) != std::string::npos)) {
     std::string text = format.substr(prev, pos - prev);
     std::string new_text;
-    for (auto &c : text) {
+    for (auto& c : text) {
       if (c == '\\') continue;
       new_text.push_back(c);
     }
@@ -2022,7 +2022,7 @@
         return absl::InternalError(absl::StrCat(
             "Invalid operand '", op_name, "' used in format '", format, "'"));
       }
-      auto *format_info = new FormatInfo();
+      auto* format_info = new FormatInfo();
       format_info->op_name = op_name;
       format_info->is_formatted = false;
       if ((pos != std::string::npos) && (format[pos] == '?')) {
@@ -2047,14 +2047,14 @@
   if (prev != std::string::npos) {
     std::string text = format.substr(prev);
     std::string new_text;
-    for (auto &c : text) {
+    for (auto& c : text) {
       if (c == '\\') continue;
       new_text.push_back(c);
     }
     disasm_fmt->format_fragment_vec.push_back(new_text);
   }
   std::string str;
-  for (auto &s : disasm_fmt->format_fragment_vec) {
+  for (auto& s : disasm_fmt->format_fragment_vec) {
     absl::StrAppend(&str, s, ":");
   }
   int width = 0;
@@ -2062,7 +2062,7 @@
   if (count < disasm_field_widths_.size()) {
     auto result = disasm_field_widths_[count]->GetValue();
     if (result.ok()) {
-      auto *value_ptr = std::get_if<int>(&result.value());
+      auto* value_ptr = std::get_if<int>(&result.value());
       width = *value_ptr;
     }
   }
@@ -2071,7 +2071,7 @@
   return absl::OkStatus();
 }
 
-static std::string::size_type skip_space(const std::string &str,
+static std::string::size_type skip_space(const std::string& str,
                                          std::string::size_type pos) {
   if (pos == std::string::npos) return pos;
   if (pos >= str.size()) {
@@ -2084,15 +2084,15 @@
   return pos;
 }
 
-absl::StatusOr<FormatInfo *> InstructionSetVisitor::ParseFormatExpression(
-    std::string expr, Opcode *op) {
+absl::StatusOr<FormatInfo*> InstructionSetVisitor::ParseFormatExpression(
+    std::string expr, Opcode* op) {
   // The format expression is very simple. It is of the form:
   // [@+/-] ident | '(' ident <</>> number ')'
   // where @ signifies the current instruction address.
   // In short, the value of the field can be shifted left or right, then added
   // to, or subtracted from, the instruction address.
 
-  FormatInfo *format_info = new FormatInfo();
+  FormatInfo* format_info = new FormatInfo();
 
   std::string::size_type pos = 0;
   pos = skip_space(expr, pos);
@@ -2262,7 +2262,7 @@
 std::string InstructionSetVisitor::GenerateHdrFileProlog(
     absl::string_view file_name, absl::string_view opcode_file_name,
     absl::string_view guard_name, absl::string_view encoding_base_name,
-    const std::vector<std::string> &namespaces) {
+    const std::vector<std::string>& namespaces) {
   std::string output;
   absl::StrAppend(&output, "#ifndef ", guard_name,
                   "\n"
@@ -2282,7 +2282,7 @@
                   "\"\n"
                   "\n");
 
-  for (const auto &namespace_name : namespaces) {
+  for (const auto& namespace_name : namespaces) {
     absl::StrAppend(&output, "namespace ", namespace_name, " {\n");
   }
   absl::StrAppend(
@@ -2404,7 +2404,7 @@
 InstructionSetVisitor::GenerateEncFilePrologs(
     absl::string_view file_name, absl::string_view guard_name,
     absl::string_view opcode_file_name, absl::string_view encoding_type_name,
-    const std::vector<std::string> &namespaces) {
+    const std::vector<std::string>& namespaces) {
   std::string h_output;
   std::string cc_output;
   absl::StrAppend(&h_output, "#ifndef ", guard_name,
@@ -2451,7 +2451,7 @@
                   "\"\n"
                   "\n");
 
-  for (const auto &namespace_name : namespaces) {
+  for (const auto& namespace_name : namespaces) {
     absl::StrAppend(&h_output, "namespace ", namespace_name, " {\n");
     absl::StrAppend(&cc_output, "namespace ", namespace_name, " {\n");
   }
@@ -2461,7 +2461,7 @@
 }
 
 std::string InstructionSetVisitor::GenerateHdrFileEpilog(
-    absl::string_view guard_name, const std::vector<std::string> &namespaces) {
+    absl::string_view guard_name, const std::vector<std::string>& namespaces) {
   std::string output;
   absl::StrAppend(&output, GenerateNamespaceEpilog(namespaces));
   absl::StrAppend(&output, "\n#endif  // ", guard_name, "\n");
@@ -2470,7 +2470,7 @@
 
 std::string InstructionSetVisitor::GenerateCcFileProlog(
     absl::string_view hdr_file_name, bool use_includes,
-    const std::vector<std::string> &namespaces) {
+    const std::vector<std::string>& namespaces) {
   std::string output;
   // Include files.
   absl::StrAppend(&output, "#include \"", hdr_file_name, "\"\n");
@@ -2478,13 +2478,13 @@
                   "\n#include <array>\n\n"
                   "#include \"absl/strings/str_format.h\"\n\n");
   if (use_includes) {
-    for (auto &include_file : include_files_) {
+    for (auto& include_file : include_files_) {
       absl::StrAppend(&output, "#include ", include_file, "\n");
     }
   }
   absl::StrAppend(&output, "\n");
   // Namespaces.
-  for (const auto &namespace_name : namespaces) {
+  for (const auto& namespace_name : namespaces) {
     absl::StrAppend(&output, "namespace ", namespace_name, " {\n");
   }
   absl::StrAppend(&output, "\n");
@@ -2492,12 +2492,12 @@
 }
 
 std::string InstructionSetVisitor::GenerateSimpleHdrProlog(
-    absl::string_view guard_name, const std::vector<std::string> &namespaces) {
+    absl::string_view guard_name, const std::vector<std::string>& namespaces) {
   std::string output;
   absl::StrAppend(&output, "#ifndef ", guard_name, "\n#define ", guard_name,
                   "\n\n");
 
-  for (const auto &namespace_name : namespaces) {
+  for (const auto& namespace_name : namespaces) {
     absl::StrAppend(&output, "namespace ", namespace_name, " {\n");
   }
   absl::StrAppend(&output, "\n");
@@ -2505,7 +2505,7 @@
 }
 
 std::string InstructionSetVisitor::GenerateNamespaceEpilog(
-    const std::vector<std::string> &namespaces) {
+    const std::vector<std::string>& namespaces) {
   std::string output;
   // Close up namespaces.
   absl::StrAppend(&output, "\n");
@@ -2518,7 +2518,7 @@
 
 absl::Status InstructionSetVisitor::AddConstant(absl::string_view name,
                                                 absl::string_view,
-                                                TemplateExpression *expr) {
+                                                TemplateExpression* expr) {
   if (constant_map_.contains(name)) {
     return absl::AlreadyExistsError(
         absl::StrCat("Constant redefinition of '", name, "'"));
@@ -2527,7 +2527,7 @@
   return absl::OkStatus();
 }
 
-TemplateExpression *InstructionSetVisitor::GetConstExpression(
+TemplateExpression* InstructionSetVisitor::GetConstExpression(
     absl::string_view name) const {
   auto iter = constant_map_.find(name);
   if (iter == constant_map_.end()) return nullptr;
diff --git a/mpact/sim/decoder/instruction_set_visitor.h b/mpact/sim/decoder/instruction_set_visitor.h
index 0ae5408..83fa3ba 100644
--- a/mpact/sim/decoder/instruction_set_visitor.h
+++ b/mpact/sim/decoder/instruction_set_visitor.h
@@ -80,17 +80,17 @@
 
   // Entry point for processing a source_stream input, generating any output
   // files in the given directory. Returns OK if no errors were encountered.
-  absl::Status Process(const std::vector<std::string> &file_names,
-                       const std::string &prefix, const std::string &isa_name,
-                       const std::vector<std::string> &include_roots,
+  absl::Status Process(const std::vector<std::string>& file_names,
+                       const std::string& prefix, const std::string& isa_name,
+                       const std::vector<std::string>& include_roots,
                        absl::string_view directory);
 
   // Global const expressions.
   absl::Status AddConstant(absl::string_view name, absl::string_view type,
-                           TemplateExpression *expr);
-  TemplateExpression *GetConstExpression(absl::string_view name) const;
+                           TemplateExpression* expr);
+  TemplateExpression* GetConstExpression(absl::string_view name) const;
   // The current isa name.
-  const std::string &isa_name() const { return isa_name_; }
+  const std::string& isa_name() const { return isa_name_; }
 
  private:
   struct TemplateFunctionEvaluator {
@@ -103,99 +103,99 @@
 
   // Checks that any references to slots or bundles within a bundle
   // declaration are to valid slots/bundles.
-  void PerformBundleReferenceChecks(InstructionSet *instruction_set,
-                                    Bundle *bundle);
+  void PerformBundleReferenceChecks(InstructionSet* instruction_set,
+                                    Bundle* bundle);
   // The following methods visits the parts of the parse tree indicated by
   // the method name and builds up the internal representation used for
   // decoder generation.
-  void VisitTopLevel(TopLevelCtx *ctx);
+  void VisitTopLevel(TopLevelCtx* ctx);
 
-  std::unique_ptr<InstructionSet> VisitIsaDeclaration(IsaDeclCtx *ctx);
-  void VisitConstantDef(ConstantDefCtx *ctx);
-  void VisitBundleList(BundleListCtx *ctx, Bundle *bundle);
-  void VisitOpcodeList(OpcodeListCtx *ctx, Slot *slot);
-  void VisitOpcodeOperands(OpcodeOperandsCtx *ctx, int op_spec_number,
-                           Instruction *parent, Instruction *child, Slot *slot);
-  void VisitSlotList(SlotListCtx *ctx, Bundle *);
-  void VisitIncludeFile(IncludeFileCtx *ctx);
-  void VisitSlotDeclaration(SlotDeclCtx *ctx, InstructionSet *instruction_set);
-  void VisitConstAndDefaultDecls(ConstAndDefaultCtx *ctx, Slot *slot);
-  TemplateExpression *VisitExpression(ExpressionCtx *ctx, Slot *slot,
-                                      Instruction *inst);
-  std::vector<int> VisitArraySpec(ArraySpecCtx *ctx);
-  void VisitNamespaceDecl(NamespaceDeclCtx *ctx, InstructionSet *isa);
-  void VisitBundleDeclaration(BundleDeclCtx *ctx,
-                              InstructionSet *instruction_set);
-  void VisitDisasmWidthsDecl(DisasmWidthsCtx *ctx);
-  void VisitInstructionAttributeList(InstructionAttributeListCtx *ctx,
-                                     Slot *slot, Instruction *inst);
-  void VisitOpcodeAttributes(OpcodeAttributeListCtx *ctx, Instruction *inst,
-                             Slot *slot);
-  void VisitSemfuncSpec(SemfuncSpecCtx *semfunc_spec, Instruction *inst);
-  void VisitResourceDetails(ResourceDetailsCtx *ctx, Instruction *inst,
-                            Slot *slot);
-  std::optional<ResourceReference *> ProcessResourceReference(
-      Slot *slot, Instruction *inst, ResourceItemCtx *resource_item);
-  void VisitResourceDetailsLists(ResourceDetailsCtx *ctx, Slot *slot,
-                                 Instruction *inst, ResourceSpec *spec);
+  std::unique_ptr<InstructionSet> VisitIsaDeclaration(IsaDeclCtx* ctx);
+  void VisitConstantDef(ConstantDefCtx* ctx);
+  void VisitBundleList(BundleListCtx* ctx, Bundle* bundle);
+  void VisitOpcodeList(OpcodeListCtx* ctx, Slot* slot);
+  void VisitOpcodeOperands(OpcodeOperandsCtx* ctx, int op_spec_number,
+                           Instruction* parent, Instruction* child, Slot* slot);
+  void VisitSlotList(SlotListCtx* ctx, Bundle*);
+  void VisitIncludeFile(IncludeFileCtx* ctx);
+  void VisitSlotDeclaration(SlotDeclCtx* ctx, InstructionSet* instruction_set);
+  void VisitConstAndDefaultDecls(ConstAndDefaultCtx* ctx, Slot* slot);
+  TemplateExpression* VisitExpression(ExpressionCtx* ctx, Slot* slot,
+                                      Instruction* inst);
+  std::vector<int> VisitArraySpec(ArraySpecCtx* ctx);
+  void VisitNamespaceDecl(NamespaceDeclCtx* ctx, InstructionSet* isa);
+  void VisitBundleDeclaration(BundleDeclCtx* ctx,
+                              InstructionSet* instruction_set);
+  void VisitDisasmWidthsDecl(DisasmWidthsCtx* ctx);
+  void VisitInstructionAttributeList(InstructionAttributeListCtx* ctx,
+                                     Slot* slot, Instruction* inst);
+  void VisitOpcodeAttributes(OpcodeAttributeListCtx* ctx, Instruction* inst,
+                             Slot* slot);
+  void VisitSemfuncSpec(SemfuncSpecCtx* semfunc_spec, Instruction* inst);
+  void VisitResourceDetails(ResourceDetailsCtx* ctx, Instruction* inst,
+                            Slot* slot);
+  std::optional<ResourceReference*> ProcessResourceReference(
+      Slot* slot, Instruction* inst, ResourceItemCtx* resource_item);
+  void VisitResourceDetailsLists(ResourceDetailsCtx* ctx, Slot* slot,
+                                 Instruction* inst, ResourceSpec* spec);
   std::unique_ptr<InstructionSet> ProcessTopLevel(absl::string_view isa_name);
-  void ParseIncludeFile(antlr4::ParserRuleContext *ctx,
-                        const std::string &file_name,
-                        const std::vector<std::string> &dirs);
-  DestinationOperand *FindDestinationOpInExpression(ExpressionCtx *ctx,
-                                                    const Slot *slot,
-                                                    const Instruction *inst);
+  void ParseIncludeFile(antlr4::ParserRuleContext* ctx,
+                        const std::string& file_name,
+                        const std::vector<std::string>& dirs);
+  DestinationOperand* FindDestinationOpInExpression(ExpressionCtx* ctx,
+                                                    const Slot* slot,
+                                                    const Instruction* inst);
   void PerformOpcodeOverrides(
-      absl::flat_hash_set<OpcodeSpecCtx *> overridden_ops_set, Slot *slot);
-  void PreProcessDeclarations(const std::vector<DeclarationCtx *> &ctx_vec);
+      absl::flat_hash_set<OpcodeSpecCtx*> overridden_ops_set, Slot* slot);
+  void PreProcessDeclarations(const std::vector<DeclarationCtx*>& ctx_vec);
   void ProcessOpcodeList(
-      OpcodeListCtx *ctx, Slot *slot,
-      std::vector<Instruction *> &instruction_vec,
-      absl::flat_hash_set<std::string> &deleted_ops_set,
-      absl::flat_hash_set<OpcodeSpecCtx *> &overridden_ops_set);
+      OpcodeListCtx* ctx, Slot* slot,
+      std::vector<Instruction*>& instruction_vec,
+      absl::flat_hash_set<std::string>& deleted_ops_set,
+      absl::flat_hash_set<OpcodeSpecCtx*>& overridden_ops_set);
   void ProcessOpcodeSpec(
-      OpcodeSpecCtx *opcode_ctx, Slot *slot,
-      std::vector<Instruction *> &instruction_vec,
-      absl::flat_hash_set<std::string> &deleted_ops_set,
-      absl::flat_hash_set<OpcodeSpecCtx *> &overridden_ops_set);
+      OpcodeSpecCtx* opcode_ctx, Slot* slot,
+      std::vector<Instruction*>& instruction_vec,
+      absl::flat_hash_set<std::string>& deleted_ops_set,
+      absl::flat_hash_set<OpcodeSpecCtx*>& overridden_ops_set);
   // Process the GENERATE() directive.
   absl::Status ProcessOpcodeGenerator(
-      OpcodeSpecCtx *ctx, Slot *slot,
-      std::vector<Instruction *> &instruction_vec,
-      absl::flat_hash_set<std::string> &deleted_ops_set,
-      absl::flat_hash_set<OpcodeSpecCtx *> &overridden_ops_set);
+      OpcodeSpecCtx* ctx, Slot* slot,
+      std::vector<Instruction*>& instruction_vec,
+      absl::flat_hash_set<std::string>& deleted_ops_set,
+      absl::flat_hash_set<OpcodeSpecCtx*>& overridden_ops_set);
   // Helper function fused by ProcessOpcodeGenerator.
   std::string GenerateOpcodeSpec(
-      const std::vector<RangeAssignmentInfo *> &range_info_vec, int index,
-      const std::string &template_str_in) const;
+      const std::vector<RangeAssignmentInfo*>& range_info_vec, int index,
+      const std::string& template_str_in) const;
   // These methods parses the disassembly format string.
-  absl::Status ParseDisasmFormat(std::string format, Instruction *inst);
+  absl::Status ParseDisasmFormat(std::string format, Instruction* inst);
   absl::StatusOr<std::string> ParseNumberFormat(std::string format);
-  absl::StatusOr<FormatInfo *> ParseFormatExpression(std::string expr,
-                                                     Opcode *op);
+  absl::StatusOr<FormatInfo*> ParseFormatExpression(std::string expr,
+                                                    Opcode* op);
 
   // Generate file prologues/epilogues.
   std::string GenerateHdrFileProlog(absl::string_view file_name,
                                     absl::string_view opcode_file_name,
                                     absl::string_view guard_name,
                                     absl::string_view encoding_base_name,
-                                    const std::vector<std::string> &namespaces);
+                                    const std::vector<std::string>& namespaces);
   std::tuple<std::string, std::string> GenerateEncFilePrologs(
       absl::string_view file_name, absl::string_view guard_name,
       absl::string_view opcode_file_name, absl::string_view encoding_type_name,
-      const std::vector<std::string> &namespaces);
+      const std::vector<std::string>& namespaces);
   std::string GenerateHdrFileEpilog(absl::string_view guard_name,
-                                    const std::vector<std::string> &namespaces);
+                                    const std::vector<std::string>& namespaces);
   std::string GenerateCcFileProlog(absl::string_view hdr_file_name,
                                    bool use_includes,
-                                   const std::vector<std::string> &namespaces);
+                                   const std::vector<std::string>& namespaces);
   std::string GenerateNamespaceEpilog(
-      const std::vector<std::string> &namespaces);
+      const std::vector<std::string>& namespaces);
   std::string GenerateSimpleHdrProlog(
-      absl::string_view guard_name, const std::vector<std::string> &namespaces);
+      absl::string_view guard_name, const std::vector<std::string>& namespaces);
 
   // Error handler.
-  decoder::DecoderErrorListener *error_listener() const {
+  decoder::DecoderErrorListener* error_listener() const {
     return error_listener_.get();
   }
   void set_error_listener(
@@ -207,12 +207,12 @@
 
   // Slot and bundle maps - these point to the contexts for every slot and
   // bundle that have been declared.
-  absl::flat_hash_map<std::string, SlotDeclCtx *> slot_decl_map_;
-  absl::flat_hash_map<std::string, BundleDeclCtx *> bundle_decl_map_;
-  absl::flat_hash_map<std::string, IsaDeclCtx *> isa_decl_map_;
+  absl::flat_hash_map<std::string, SlotDeclCtx*> slot_decl_map_;
+  absl::flat_hash_map<std::string, BundleDeclCtx*> bundle_decl_map_;
+  absl::flat_hash_map<std::string, IsaDeclCtx*> isa_decl_map_;
 
   // Constant map
-  absl::flat_hash_map<std::string, TemplateExpression *> constant_map_;
+  absl::flat_hash_map<std::string, TemplateExpression*> constant_map_;
   // Include file strings.
   absl::btree_set<std::string> include_files_;
 
@@ -221,7 +221,7 @@
   // Vector of file names.
   std::vector<std::string> file_names_;
   // Map from context pointer to file index.
-  absl::flat_hash_map<antlr4::ParserRuleContext *, int> context_file_map_;
+  absl::flat_hash_map<antlr4::ParserRuleContext*, int> context_file_map_;
   // Include file roots.
   std::vector<std::string> include_dir_vec_;
   // Keep track of files that are included in case there is recursive includes.
@@ -232,9 +232,9 @@
   absl::flat_hash_map<std::string, TemplateFunctionEvaluator>
       template_function_evaluators_;
   // Disassembler field widths.
-  std::vector<TemplateExpression *> disasm_field_widths_;
+  std::vector<TemplateExpression*> disasm_field_widths_;
   // AntlrParserWrapper vector.
-  std::vector<IsaAntlrParserWrapper *> antlr_parser_wrappers_;
+  std::vector<IsaAntlrParserWrapper*> antlr_parser_wrappers_;
 };
 
 }  // namespace instruction_set
diff --git a/mpact/sim/decoder/opcode.cc b/mpact/sim/decoder/opcode.cc
index a4a3d30..a5e7e2e 100644
--- a/mpact/sim/decoder/opcode.cc
+++ b/mpact/sim/decoder/opcode.cc
@@ -37,7 +37,7 @@
     : name_(name), pascal_name_(ToPascalCase(name)), value_(value) {}
 
 Opcode::~Opcode() {
-  for (auto *dest_op : dest_op_vec_) {
+  for (auto* dest_op : dest_op_vec_) {
     delete dest_op;
   }
   dest_op_vec_.clear();
@@ -51,20 +51,20 @@
 
 void Opcode::AppendDestOp(absl::string_view op_name, bool is_array,
                           bool is_reloc) {
-  auto *op = new DestinationOperand(std::string(op_name), is_array, is_reloc);
+  auto* op = new DestinationOperand(std::string(op_name), is_array, is_reloc);
   dest_op_vec_.push_back(op);
   dest_op_map_.insert(std::make_pair(std::string(op_name), op));
 }
 
 void Opcode::AppendDestOp(absl::string_view op_name, bool is_array,
-                          bool is_reloc, TemplateExpression *expression) {
-  auto *op = new DestinationOperand(std::string(op_name), is_array, is_reloc,
+                          bool is_reloc, TemplateExpression* expression) {
+  auto* op = new DestinationOperand(std::string(op_name), is_array, is_reloc,
                                     expression);
   dest_op_vec_.push_back(op);
   dest_op_map_.insert(std::make_pair(std::string(op_name), op));
 }
 
-DestinationOperand *Opcode::GetDestOp(absl::string_view op_name) {
+DestinationOperand* Opcode::GetDestOp(absl::string_view op_name) {
   auto iter = dest_op_map_.find(op_name);
   if (iter != dest_op_map_.end()) return iter->second;
 
@@ -72,8 +72,8 @@
 }
 
 bool Opcode::ValidateDestLatencies(
-    const std::function<bool(int)> &validator) const {
-  for (auto const *dest_op : dest_op_vec_) {
+    const std::function<bool(int)>& validator) const {
+  for (auto const* dest_op : dest_op_vec_) {
     if (dest_op->expression() != nullptr) {
       auto result = dest_op->GetLatency();
       if (!result.ok()) return false;
@@ -83,9 +83,9 @@
   return true;
 }
 
-Opcode *OpcodeFactory::CreateDefaultOpcode() { return new Opcode("", -1); }
+Opcode* OpcodeFactory::CreateDefaultOpcode() { return new Opcode("", -1); }
 
-absl::StatusOr<Opcode *> OpcodeFactory::CreateOpcode(absl::string_view name) {
+absl::StatusOr<Opcode*> OpcodeFactory::CreateOpcode(absl::string_view name) {
   if (opcode_names_.contains(name)) {
     return absl::InternalError(
         absl::StrCat("Opcode '", name, "' already declared"));
@@ -97,26 +97,26 @@
   return opcode;
 }
 
-Opcode *OpcodeFactory::CreateChildOpcode(Opcode *opcode) const {
+Opcode* OpcodeFactory::CreateChildOpcode(Opcode* opcode) const {
   if (opcode == nullptr) return nullptr;
-  auto *child = new Opcode(opcode->name(), -1);
+  auto* child = new Opcode(opcode->name(), -1);
   return child;
 }
 
-absl::StatusOr<Opcode *> OpcodeFactory::CreateDerivedOpcode(
-    const Opcode *opcode, TemplateInstantiationArgs *args) {
+absl::StatusOr<Opcode*> OpcodeFactory::CreateDerivedOpcode(
+    const Opcode* opcode, TemplateInstantiationArgs* args) {
   // Allocate a new opcode. Copy the basic information.
   auto new_opcode = new Opcode(opcode->name(), opcode->value());
   new_opcode->set_instruction_size(opcode->instruction_size());
   new_opcode->predicate_op_name_ = opcode->predicate_op_name();
   new_opcode->op_locator_map_ = opcode->op_locator_map();
-  for (auto const &src_op : opcode->source_op_vec()) {
+  for (auto const& src_op : opcode->source_op_vec()) {
     new_opcode->AppendSourceOp(src_op.name, src_op.is_array, src_op.is_reloc);
   }
 
   // Copy destination operands, but evaluate any latencies using the template
   // instantiation arguments, in case those expressions use them.
-  for (auto const *dest_op : opcode->dest_op_vec()) {
+  for (auto const* dest_op : opcode->dest_op_vec()) {
     if (dest_op->expression() == nullptr) {
       new_opcode->AppendDestOp(dest_op->name(), dest_op->is_array(),
                                dest_op->is_reloc());
diff --git a/mpact/sim/decoder/opcode.h b/mpact/sim/decoder/opcode.h
index e616a96..ca04563 100644
--- a/mpact/sim/decoder/opcode.h
+++ b/mpact/sim/decoder/opcode.h
@@ -53,7 +53,7 @@
  public:
   // Operand latency is defined by the expression.
   DestinationOperand(std::string name, bool is_array, bool is_reloc,
-                     TemplateExpression *expression)
+                     TemplateExpression* expression)
       : name_(std::move(name)),
         pascal_case_name_(ToPascalCase(name_)),
         expression_(expression),
@@ -80,9 +80,9 @@
     expression_ = nullptr;
   }
 
-  const std::string &name() const { return name_; }
-  const std::string &pascal_case_name() const { return pascal_case_name_; }
-  TemplateExpression *expression() const { return expression_; }
+  const std::string& name() const { return name_; }
+  const std::string& pascal_case_name() const { return pascal_case_name_; }
+  TemplateExpression* expression() const { return expression_; }
   bool is_array() const { return is_array_; }
   bool is_reloc() const { return is_reloc_; }
   bool HasLatency() const { return expression_ != nullptr; }
@@ -94,7 +94,7 @@
           "Template expression evaluation error", res.status().message()));
     }
     auto variant_value = res.value();
-    auto *value_ptr = std::get_if<int>(&variant_value);
+    auto* value_ptr = std::get_if<int>(&variant_value);
     if (value_ptr == nullptr) {
       return absl::InternalError("Template expression type error");
     }
@@ -104,7 +104,7 @@
  private:
   std::string name_;
   std::string pascal_case_name_;
-  TemplateExpression *expression_;
+  TemplateExpression* expression_;
   bool is_array_ = false;
   bool is_reloc_ = false;
 };
@@ -144,7 +144,7 @@
 struct FormatInfo {
   FormatInfo() = default;
   // Use default copy constructor.
-  FormatInfo(const FormatInfo &) = default;
+  FormatInfo(const FormatInfo&) = default;
   std::string op_name;
   bool is_formatted = true;
   bool is_optional = false;
@@ -158,18 +158,18 @@
 struct DisasmFormat {
   DisasmFormat() = default;
   // Copy constructor.
-  DisasmFormat(const DisasmFormat &df) {
+  DisasmFormat(const DisasmFormat& df) {
     width = df.width;
-    for (auto const &frag : df.format_fragment_vec) {
+    for (auto const& frag : df.format_fragment_vec) {
       format_fragment_vec.push_back(frag);
     }
-    for (auto const *info : df.format_info_vec) {
+    for (auto const* info : df.format_info_vec) {
       format_info_vec.push_back(new FormatInfo(*info));
     }
   }
   // Destructor.
   ~DisasmFormat() {
-    for (auto *info : format_info_vec) {
+    for (auto* info : format_info_vec) {
       delete info;
     }
     format_info_vec.clear();
@@ -177,25 +177,25 @@
   int width = 0;
   int num_optional = 0;
   std::vector<std::string> format_fragment_vec;
-  std::vector<FormatInfo *> format_info_vec;
+  std::vector<FormatInfo*> format_info_vec;
 };
 
 struct ResourceReference {
-  Resource *resource;
+  Resource* resource;
   bool is_array;
-  DestinationOperand *dest_op;
-  TemplateExpression *begin_expression;
-  TemplateExpression *end_expression;
-  ResourceReference(Resource *resource_, bool is_array_,
-                    DestinationOperand *dest_op_,
-                    TemplateExpression *begin_expr_,
-                    TemplateExpression *end_expr_)
+  DestinationOperand* dest_op;
+  TemplateExpression* begin_expression;
+  TemplateExpression* end_expression;
+  ResourceReference(Resource* resource_, bool is_array_,
+                    DestinationOperand* dest_op_,
+                    TemplateExpression* begin_expr_,
+                    TemplateExpression* end_expr_)
       : resource(resource_),
         is_array(is_array_),
         dest_op(dest_op_),
         begin_expression(begin_expr_),
         end_expression(end_expr_) {}
-  ResourceReference(const ResourceReference &rhs) {
+  ResourceReference(const ResourceReference& rhs) {
     resource = rhs.resource;
     is_array = rhs.is_array;
     dest_op = rhs.dest_op;
@@ -230,47 +230,47 @@
   // methods will be left to the user of this generator tool.
   void AppendSourceOp(absl::string_view op_name, bool is_array, bool is_reloc);
   void AppendDestOp(absl::string_view op_name, bool is_array, bool is_reloc,
-                    TemplateExpression *expression);
+                    TemplateExpression* expression);
   void AppendDestOp(absl::string_view op_name, bool is_array, bool is_reloc);
-  DestinationOperand *GetDestOp(absl::string_view op_name);
+  DestinationOperand* GetDestOp(absl::string_view op_name);
   // Append child opcode specification.
-  void AppendChild(Opcode *op) { child_ = op; }
+  void AppendChild(Opcode* op) { child_ = op; }
   // Checks destination latencies with the given function. Returns true if all
   // comply.
-  bool ValidateDestLatencies(const std::function<bool(int)> &validator) const;
+  bool ValidateDestLatencies(const std::function<bool(int)>& validator) const;
   int instruction_size() const { return instruction_size_; }
   void set_instruction_size(int val) { instruction_size_ = val; }
-  Opcode *child() const { return child_; }
-  Opcode *parent() const { return parent_; }
-  const std::string &name() const { return name_; }
-  const std::string &pascal_name() const { return pascal_name_; }
+  Opcode* child() const { return child_; }
+  Opcode* parent() const { return parent_; }
+  const std::string& name() const { return name_; }
+  const std::string& pascal_name() const { return pascal_name_; }
   // Each opcode is assigned a unique value that is used in the slot class
   // enum definition.
   int value() const { return value_; }
   // Predicate, source and destination operand names.
-  const std::string &predicate_op_name() const { return predicate_op_name_; }
+  const std::string& predicate_op_name() const { return predicate_op_name_; }
   void set_predicate_op_name(absl::string_view op_name) {
     predicate_op_name_ = op_name;
   }
-  const std::vector<SourceOperand> &source_op_vec() const {
+  const std::vector<SourceOperand>& source_op_vec() const {
     return source_op_vec_;
   }
-  const std::vector<DestinationOperand *> &dest_op_vec() const {
+  const std::vector<DestinationOperand*>& dest_op_vec() const {
     return dest_op_vec_;
   }
 
-  OpLocatorMap &op_locator_map() { return op_locator_map_; }  // not const.
-  const OpLocatorMap &op_locator_map() const { return op_locator_map_; }
+  OpLocatorMap& op_locator_map() { return op_locator_map_; }  // not const.
+  const OpLocatorMap& op_locator_map() const { return op_locator_map_; }
 
  private:
   Opcode(absl::string_view name, int value);
   int instruction_size_;
-  Opcode *child_ = nullptr;
-  Opcode *parent_ = nullptr;
+  Opcode* child_ = nullptr;
+  Opcode* parent_ = nullptr;
   std::string predicate_op_name_;
   std::vector<SourceOperand> source_op_vec_;
-  std::vector<DestinationOperand *> dest_op_vec_;
-  absl::flat_hash_map<std::string, DestinationOperand *> dest_op_map_;
+  std::vector<DestinationOperand*> dest_op_vec_;
+  absl::flat_hash_map<std::string, DestinationOperand*> dest_op_map_;
   std::string name_;
   std::string pascal_name_;
   std::string semfunc_code_string_;
@@ -285,18 +285,18 @@
 
   // If the opcode doesn't yet exist, create a new opcode and return the
   // pointer, otherwise return an error code.
-  absl::StatusOr<Opcode *> CreateOpcode(absl::string_view name);
-  Opcode *CreateDefaultOpcode();
-  Opcode *CreateChildOpcode(Opcode *opcode) const;
+  absl::StatusOr<Opcode*> CreateOpcode(absl::string_view name);
+  Opcode* CreateDefaultOpcode();
+  Opcode* CreateChildOpcode(Opcode* opcode) const;
   // Duplicate the opcode, but evaluate the destination latency expressions
   // with the template argument expression vector.
-  absl::StatusOr<Opcode *> CreateDerivedOpcode(const Opcode *opcode,
-                                               TemplateInstantiationArgs *args);
-  const std::vector<Opcode *> &opcode_vec() const { return opcode_vec_; }
+  absl::StatusOr<Opcode*> CreateDerivedOpcode(const Opcode* opcode,
+                                              TemplateInstantiationArgs* args);
+  const std::vector<Opcode*>& opcode_vec() const { return opcode_vec_; }
 
  private:
   absl::btree_set<std::string> opcode_names_;
-  std::vector<Opcode *> opcode_vec_;
+  std::vector<Opcode*> opcode_vec_;
   int opcode_value_ = 1;
 };
 
diff --git a/mpact/sim/decoder/overlay.cc b/mpact/sim/decoder/overlay.cc
index cdc1f0c..71e9f89 100644
--- a/mpact/sim/decoder/overlay.cc
+++ b/mpact/sim/decoder/overlay.cc
@@ -36,7 +36,7 @@
 using ::mpact::sim::machine_description::instruction_set::ToPascalCase;
 using ::mpact::sim::machine_description::instruction_set::ToSnakeCase;
 
-BitsOrField::BitsOrField(Field *field, int high, int low, int width)
+BitsOrField::BitsOrField(Field* field, int high, int low, int width)
     : field_(field), high_(high), low_(low), width_(width), position_(-1) {}
 
 BitsOrField::BitsOrField(BinaryNum bin_num, int width)
@@ -44,14 +44,14 @@
   width_ = bin_num_.width;
 }
 
-Overlay::Overlay(std::string name, bool is_signed, int width, Format *format)
+Overlay::Overlay(std::string name, bool is_signed, int width, Format* format)
     : name_(name),
       is_signed_(is_signed),
       declared_width_(width),
       format_(format) {}
 
 Overlay::~Overlay() {
-  for (auto *item : component_vec_) {
+  for (auto* item : component_vec_) {
     delete item;
   }
   component_vec_.clear();
@@ -83,7 +83,7 @@
 
 // Adds a series of bit references to a field.
 absl::Status Overlay::AddFieldReference(std::string field_name,
-                                        const std::vector<BitRange> &ranges) {
+                                        const std::vector<BitRange>& ranges) {
   // Verify that the fields is valid.
   auto field = format_->GetField(field_name);
   if (field == nullptr) {
@@ -92,7 +92,7 @@
                      "' does not name a field in '", format_->name(), "'"));
   }
   // Scan the ranges.
-  for (auto &range : ranges) {
+  for (auto& range : ranges) {
     // Verify that the ranges don't refer to bits that don't exist.
     if (range.first < 0 || range.first >= field->width) {
       return absl::InternalError(absl::StrCat("bit index '", range.first,
@@ -117,8 +117,8 @@
   return absl::OkStatus();
 }
 
-absl::Status Overlay::AddFormatReference(const std::vector<BitRange> &ranges) {
-  for (auto &range : ranges) {
+absl::Status Overlay::AddFormatReference(const std::vector<BitRange>& ranges) {
+  for (auto& range : ranges) {
     // Check that the range is legal for the format.
     if (range.first < 0 || range.first >= format_->declared_width()) {
       return absl::InternalError(absl::StrCat("bit index '", range.first,
@@ -151,7 +151,7 @@
 
   high_low_computed_ = true;
   int position = declared_width_ - 1;
-  for (auto *component : component_vec_) {
+  for (auto* component : component_vec_) {
     component->set_position(position);
     if (component->high() >= 0) {
       // Field or format reference.
@@ -174,7 +174,7 @@
         "Overlay definition incomplete: declared width != computed width");
 
   uint64_t value = 0;
-  for (auto *component : component_vec_) {
+  for (auto* component : component_vec_) {
     if (component->high() < 0) {
       BinaryNum bin_num = component->bin_num();
       // If value == 0, nothing to or in - it just takes space.
@@ -194,7 +194,7 @@
 
 absl::StatusOr<uint64_t> Overlay::GetBitField(uint64_t input) {
   uint64_t bitfield = 0;
-  for (auto *component : component_vec_) {
+  for (auto* component : component_vec_) {
     // Constant bits do not map to the instruction word.
     if (component->high() < 0) continue;
     uint64_t mask = ((1ULL << component->width()) - 1);
@@ -205,7 +205,7 @@
   return bitfield;
 }
 
-bool Overlay::operator==(const Overlay &rhs) const {
+bool Overlay::operator==(const Overlay& rhs) const {
   if (declared_width_ > 64) {
     return WriteComplexValueExtractor("value", "result", "") ==
            rhs.WriteComplexValueExtractor("value", "result", "");
@@ -215,7 +215,7 @@
   }
 }
 
-bool Overlay::operator!=(const Overlay &rhs) const { return !(*this == rhs); }
+bool Overlay::operator!=(const Overlay& rhs) const { return !(*this == rhs); }
 
 // Return a string with the code (not counting function definition, variable
 // definition or return statement) for extracting the value of the overlay from
@@ -225,7 +225,7 @@
                                                absl::string_view result) const {
   std::string output;
   std::string assign = " = ";
-  for (auto *component : component_vec_) {
+  for (auto* component : component_vec_) {
     if (component->high() < 0) {
       // Binary literals are added.
       BinaryNum bin_num = component->bin_num();
@@ -289,7 +289,7 @@
                   union_type, "*>(",
                   format_->declared_width() > 64 ? "value);\n" : "&value);\n");
   std::string result_type = GetUIntType(declared_width_);
-  for (auto *component : component_vec_) {
+  for (auto* component : component_vec_) {
     if (component->high() < 0) {
       // Binary literals are added.
       BinaryNum bin_num = component->bin_num();
@@ -323,7 +323,7 @@
     absl::string_view return_type) const {
   std::string output;
   std::string assign = " = ";
-  for (auto *component : component_vec_) {
+  for (auto* component : component_vec_) {
     if (component->high() < 0) {
       BinaryNum bin_num = component->bin_num();
       // If the value is 0, no need to 'or' it in.
diff --git a/mpact/sim/decoder/overlay.h b/mpact/sim/decoder/overlay.h
index cd05ed7..ebd638b 100644
--- a/mpact/sim/decoder/overlay.h
+++ b/mpact/sim/decoder/overlay.h
@@ -47,10 +47,10 @@
 // Helper class to store an individual component in an overlay.
 class BitsOrField {
  public:
-  BitsOrField(Field *field, int high, int low, int width);
+  BitsOrField(Field* field, int high, int low, int width);
   BitsOrField(BinaryNum bin_num, int width);
 
-  Field *field() const { return field_; }
+  Field* field() const { return field_; }
   // If != >= 0, this is the high bit position of the format that this component
   // refers to.
   int high() const { return high_; }
@@ -70,7 +70,7 @@
   BinaryNum bin_num() const { return bin_num_; }
 
  private:
-  Field *field_;
+  Field* field_;
   int high_ = -1;
   int low_ = -1;
   int width_ = -1;
@@ -82,7 +82,7 @@
 // format.
 class Overlay {
  public:
-  Overlay(std::string name, bool is_signed, int width, Format *format);
+  Overlay(std::string name, bool is_signed, int width, Format* format);
   ~Overlay();
 
   // The following methods add components to the overlay. Components are added
@@ -95,10 +95,10 @@
   // Add only the bit ranges from the given field to the overlay (in order of
   // appearance in the vector).
   absl::Status AddFieldReference(std::string field_name,
-                                 const std::vector<BitRange> &ranges);
+                                 const std::vector<BitRange>& ranges);
   // Add the bit ranges from the format to the overlay (in order of appearance
   // in the vector).
-  absl::Status AddFormatReference(const std::vector<BitRange> &ranges);
+  absl::Status AddFormatReference(const std::vector<BitRange>& ranges);
 
   // Adjusts high/low of each field reference.
   absl::Status ComputeHighLow();
@@ -109,26 +109,26 @@
                                         absl::string_view result) const;
   std::string WritePackedStructValueExtractor(absl::string_view value,
                                               absl::string_view result) const;
-  absl::StatusOr<uint64_t> GetValue(uint8_t *input);
+  absl::StatusOr<uint64_t> GetValue(uint8_t* input);
   std::string WriteComplexValueExtractor(absl::string_view value,
                                          absl::string_view result,
                                          absl::string_view return_type) const;
   absl::StatusOr<uint64_t> GetBitField(uint64_t input);
 
-  bool operator==(const Overlay &rhs) const;
-  bool operator!=(const Overlay &rhs) const;
+  bool operator==(const Overlay& rhs) const;
+  bool operator!=(const Overlay& rhs) const;
 
   // Accessors.
-  const std::string &name() const { return name_; }
+  const std::string& name() const { return name_; }
   bool is_signed() const { return is_signed_; }
   int declared_width() const { return declared_width_; }
   int computed_width() const { return computed_width_; }
   uint64_t mask() const { return mask_; }
-  const std::vector<BitsOrField *> &component_vec() const {
+  const std::vector<BitsOrField*>& component_vec() const {
     return component_vec_;
   }
   bool must_be_extracted() const { return must_be_extracted_; }
-  Format *format() const { return format_; }
+  Format* format() const { return format_; }
 
  private:
   std::string name_;
@@ -138,8 +138,8 @@
   int computed_width_ = 0;
   uint64_t mask_ = 0;
   bool must_be_extracted_ = false;
-  Format *format_ = nullptr;
-  std::vector<BitsOrField *> component_vec_;
+  Format* format_ = nullptr;
+  std::vector<BitsOrField*> component_vec_;
 };
 
 }  // namespace bin_format
diff --git a/mpact/sim/decoder/proto_constraint_expression.cc b/mpact/sim/decoder/proto_constraint_expression.cc
index 36ba220..40ae973 100644
--- a/mpact/sim/decoder/proto_constraint_expression.cc
+++ b/mpact/sim/decoder/proto_constraint_expression.cc
@@ -56,7 +56,7 @@
 }
 
 // Operator to implement negation.
-absl::StatusOr<ProtoValue> operator-(const ProtoValue &value) {
+absl::StatusOr<ProtoValue> operator-(const ProtoValue& value) {
   switch (value.index()) {
     case *ProtoValueIndex::kInt32:
       return -std::get<int32_t>(value);
diff --git a/mpact/sim/decoder/proto_constraint_expression.h b/mpact/sim/decoder/proto_constraint_expression.h
index b293cde..794ea6b 100644
--- a/mpact/sim/decoder/proto_constraint_expression.h
+++ b/mpact/sim/decoder/proto_constraint_expression.h
@@ -138,7 +138,7 @@
     if (!res.ok() || !std::holds_alternative<T>(res.value())) return T();
     return std::get<T>(res.value());
   }
-  virtual ProtoConstraintExpression *Clone() const = 0;
+  virtual ProtoConstraintExpression* Clone() const = 0;
   virtual google::protobuf::FieldDescriptor::CppType cpp_type() const = 0;
   virtual int variant_type() const = 0;
 };
@@ -146,11 +146,11 @@
 // Unary negate expression.
 class ProtoConstraintNegateExpression : public ProtoConstraintExpression {
  public:
-  explicit ProtoConstraintNegateExpression(ProtoConstraintExpression *expr)
+  explicit ProtoConstraintNegateExpression(ProtoConstraintExpression* expr)
       : expr_(expr) {}
   ~ProtoConstraintNegateExpression() override;
   absl::StatusOr<ProtoValue> GetValue() const override;
-  ProtoConstraintExpression *Clone() const override {
+  ProtoConstraintExpression* Clone() const override {
     return new ProtoConstraintNegateExpression(expr_->Clone());
   }
   google::protobuf::FieldDescriptor::CppType cpp_type() const override {
@@ -159,18 +159,18 @@
   int variant_type() const override { return expr_->variant_type(); }
 
  private:
-  ProtoConstraintExpression *expr_;
+  ProtoConstraintExpression* expr_;
 };
 
 // Enumeration value expression.
 class ProtoConstraintEnumExpression : public ProtoConstraintExpression {
  public:
   explicit ProtoConstraintEnumExpression(
-      const google::protobuf::EnumValueDescriptor *enum_value)
+      const google::protobuf::EnumValueDescriptor* enum_value)
       : enum_value_(enum_value) {}
   ~ProtoConstraintEnumExpression() override = default;
   absl::StatusOr<ProtoValue> GetValue() const override;
-  ProtoConstraintExpression *Clone() const override {
+  ProtoConstraintExpression* Clone() const override {
     return new ProtoConstraintEnumExpression(enum_value_);
   }
   google::protobuf::FieldDescriptor::CppType cpp_type() const override {
@@ -179,20 +179,20 @@
   int variant_type() const override { return *ProtoValueIndex::kInt32; }
 
  private:
-  const google::protobuf::EnumValueDescriptor *enum_value_ = nullptr;
+  const google::protobuf::EnumValueDescriptor* enum_value_ = nullptr;
 };
 
 // Constant value expression.
 class ProtoConstraintValueExpression : public ProtoConstraintExpression {
  public:
-  explicit ProtoConstraintValueExpression(const ProtoValue &value)
+  explicit ProtoConstraintValueExpression(const ProtoValue& value)
       : value_(value) {}
   template <typename T>
-  explicit ProtoConstraintValueExpression(const T &value) : value_(value) {}
+  explicit ProtoConstraintValueExpression(const T& value) : value_(value) {}
 
   ~ProtoConstraintValueExpression() override = default;
   absl::StatusOr<ProtoValue> GetValue() const override { return value_; }
-  ProtoConstraintExpression *Clone() const override {
+  ProtoConstraintExpression* Clone() const override {
     return new ProtoConstraintValueExpression(value_);
   }
   google::protobuf::FieldDescriptor::CppType cpp_type() const override {
diff --git a/mpact/sim/decoder/proto_constraint_value_set.cc b/mpact/sim/decoder/proto_constraint_value_set.cc
index 7a42ebb..27e1910 100644
--- a/mpact/sim/decoder/proto_constraint_value_set.cc
+++ b/mpact/sim/decoder/proto_constraint_value_set.cc
@@ -32,8 +32,8 @@
 
 // Local helper function used to get the minimum value for a given constraint
 // expression based on its type.
-static ProtoConstraintExpression *MinValueExpr(
-    const ProtoConstraintExpression *expr) {
+static ProtoConstraintExpression* MinValueExpr(
+    const ProtoConstraintExpression* expr) {
   auto res = expr->GetValue();
   if (!res.ok()) return nullptr;
   auto value = res.value();
@@ -65,8 +65,8 @@
 
 // Local helper function used to get the minimum value for a given constraint
 // expression based on its type.
-static ProtoConstraintExpression *MaxValueExpr(
-    const ProtoConstraintExpression *expr) {
+static ProtoConstraintExpression* MaxValueExpr(
+    const ProtoConstraintExpression* expr) {
   auto res = expr->GetValue();
   if (!res.ok()) return nullptr;
   auto value = res.value();
@@ -98,8 +98,8 @@
 
 // Basic constructor taking explicit arguments for the data members.
 ProtoConstraintValueSet::ProtoConstraintValueSet(
-    const ProtoConstraintExpression *min, bool min_included,
-    const ProtoConstraintExpression *max, bool max_included) {
+    const ProtoConstraintExpression* min, bool min_included,
+    const ProtoConstraintExpression* max, bool max_included) {
   // If either expression is nullptr, the range is malformed and treated as
   // empty.
   if ((min == nullptr || max == nullptr)) return;
@@ -113,9 +113,9 @@
 // Constructor that initializes the value set based on the expression that is
 // part of the constraint.
 ProtoConstraintValueSet::ProtoConstraintValueSet(
-    const ProtoConstraint *constraint) {
+    const ProtoConstraint* constraint) {
   field_descriptor_ = constraint->field_descriptor;
-  auto *expr = constraint->expr;
+  auto* expr = constraint->expr;
   switch (constraint->op) {
     case ConstraintType::kEq:
       subranges_.emplace_back(expr->Clone(), true, expr->Clone(), true);
@@ -138,15 +138,15 @@
       break;
     case ConstraintType::kHas: {
       int32_t value = -1;
-      auto *field = constraint->field_descriptor;
-      auto *one_of = constraint->field_descriptor->containing_oneof();
+      auto* field = constraint->field_descriptor;
+      auto* one_of = constraint->field_descriptor->containing_oneof();
       for (int32_t i = 0; i < one_of->field_count(); ++i) {
         if (one_of->field(i)->name() == field->name()) {
           value = i;
           break;
         }
       }
-      ProtoConstraintExpression *expr =
+      ProtoConstraintExpression* expr =
           new ProtoConstraintValueExpression(value);
       subranges_.emplace_back(expr, true, expr->Clone(), true);
       break;
@@ -158,9 +158,9 @@
 
 // Copy constructor.
 ProtoConstraintValueSet::ProtoConstraintValueSet(
-    const ProtoConstraintValueSet &other) {
+    const ProtoConstraintValueSet& other) {
   field_descriptor_ = other.field_descriptor_;
-  for (auto const &subrange : other.subranges_) {
+  for (auto const& subrange : other.subranges_) {
     subranges_.emplace_back(
         subrange.min == nullptr ? nullptr : subrange.min->Clone(),
         subrange.min_included,
@@ -170,7 +170,7 @@
 }
 
 ProtoConstraintValueSet::~ProtoConstraintValueSet() {
-  for (auto &subrange : subranges_) {
+  for (auto& subrange : subranges_) {
     delete subrange.min;
     delete subrange.max;
   }
@@ -181,7 +181,7 @@
 // sets.
 template <typename T>
 ProtoConstraintValueSet::SubRange ProtoConstraintValueSet::IntersectSubrange(
-    const SubRange &lhs_subrange, const SubRange &rhs_subrange) const {
+    const SubRange& lhs_subrange, const SubRange& rhs_subrange) const {
   // If both min and max are nullptr, then lhs is already a null set.
   if ((lhs_subrange.min == nullptr) && (rhs_subrange.min == nullptr)) {
     return {nullptr, false, nullptr, false};
@@ -260,11 +260,11 @@
 // Iterate over the subranges to perform subrange by subrange intersection.
 template <typename T>
 void ProtoConstraintValueSet::IntersectSubranges(
-    const std::vector<SubRange> &lhs_subranges,
-    const std::vector<SubRange> &rhs_subranges,
-    std::vector<SubRange> &new_subranges) const {
-  for (auto const &lhs_subrange : lhs_subranges) {
-    for (auto const &rhs_subrange : rhs_subranges) {
+    const std::vector<SubRange>& lhs_subranges,
+    const std::vector<SubRange>& rhs_subranges,
+    std::vector<SubRange>& new_subranges) const {
+  for (auto const& lhs_subrange : lhs_subranges) {
+    for (auto const& rhs_subrange : rhs_subranges) {
       auto subrange = IntersectSubrange<T>(lhs_subrange, rhs_subrange);
       // Ignore empty sets.
       if ((subrange.min != nullptr) && (subrange.max != nullptr)) {
@@ -275,11 +275,11 @@
 }
 
 absl::Status ProtoConstraintValueSet::IntersectWith(
-    const ProtoConstraintValueSet &rhs) {
+    const ProtoConstraintValueSet& rhs) {
   std::vector<SubRange> new_subranges;
   // If either set is empty, the result is empty.
   if (IsEmpty() || rhs.IsEmpty()) {
-    for (auto &subrange : subranges_) {
+    for (auto& subrange : subranges_) {
       delete subrange.min;
       delete subrange.max;
     }
@@ -288,9 +288,9 @@
   }
   // Get expressions to check on type compatibility. Signal error if types
   // don't match.
-  auto const *lhs_expr =
+  auto const* lhs_expr =
       subranges_[0].min != nullptr ? subranges_[0].min : subranges_[0].max;
-  auto const *rhs_expr = rhs.subranges_[0].min != nullptr
+  auto const* rhs_expr = rhs.subranges_[0].min != nullptr
                              ? rhs.subranges_[0].min
                              : rhs.subranges_[0].max;
   if ((lhs_expr != nullptr) && (rhs_expr != nullptr) &&
@@ -326,7 +326,7 @@
           absl::StrCat("Unsupported type in range"));
   }
   // Clean up the old subranges and replace with the new subranges.
-  for (auto &subrange : subranges_) {
+  for (auto& subrange : subranges_) {
     delete subrange.min;
     delete subrange.max;
   }
@@ -336,10 +336,10 @@
 }
 
 absl::Status ProtoConstraintValueSet::UnionWith(
-    const ProtoConstraintValueSet &rhs) {
+    const ProtoConstraintValueSet& rhs) {
   if (rhs.IsEmpty()) return absl::OkStatus();
   // Copy the rhs subranges.
-  for (auto &subrange : rhs.subranges_) {
+  for (auto& subrange : rhs.subranges_) {
     SubRange new_subrange;
     new_subrange.min =
         subrange.min != nullptr ? subrange.min->Clone() : nullptr;
diff --git a/mpact/sim/decoder/proto_constraint_value_set.h b/mpact/sim/decoder/proto_constraint_value_set.h
index 0c2052d..1986a13 100644
--- a/mpact/sim/decoder/proto_constraint_value_set.h
+++ b/mpact/sim/decoder/proto_constraint_value_set.h
@@ -39,13 +39,13 @@
 class ProtoConstraintValueSet {
  public:
   struct SubRange {
-    const ProtoConstraintExpression *min = nullptr;
+    const ProtoConstraintExpression* min = nullptr;
     bool min_included;
-    const ProtoConstraintExpression *max = nullptr;
+    const ProtoConstraintExpression* max = nullptr;
     bool max_included;
     SubRange() = default;
-    SubRange(const ProtoConstraintExpression *min, bool min_included,
-             const ProtoConstraintExpression *max, bool max_included)
+    SubRange(const ProtoConstraintExpression* min, bool min_included,
+             const ProtoConstraintExpression* max, bool max_included)
         : min(min),
           min_included(min_included),
           max(max),
@@ -53,26 +53,26 @@
   };
 
   ProtoConstraintValueSet() = default;
-  ProtoConstraintValueSet(const ProtoConstraintExpression *min,
+  ProtoConstraintValueSet(const ProtoConstraintExpression* min,
                           bool min_included,
-                          const ProtoConstraintExpression *max,
+                          const ProtoConstraintExpression* max,
                           bool max_included);
-  explicit ProtoConstraintValueSet(const ProtoConstraint *constraint);
-  explicit ProtoConstraintValueSet(const ProtoConstraint &constraint)
+  explicit ProtoConstraintValueSet(const ProtoConstraint* constraint);
+  explicit ProtoConstraintValueSet(const ProtoConstraint& constraint)
       : ProtoConstraintValueSet(&constraint) {}
-  ProtoConstraintValueSet(const ProtoConstraintValueSet &other);
+  ProtoConstraintValueSet(const ProtoConstraintValueSet& other);
   ~ProtoConstraintValueSet();
 
   // Intersect rhs with this, modifying this value set.
-  absl::Status IntersectWith(const ProtoConstraintValueSet &rhs);
+  absl::Status IntersectWith(const ProtoConstraintValueSet& rhs);
   // Simply add the sub ranges associated with rhs to this.
-  absl::Status UnionWith(const ProtoConstraintValueSet &rhs);
+  absl::Status UnionWith(const ProtoConstraintValueSet& rhs);
 
   bool IsEmpty() const;
 
   // Accessors.
-  const std::vector<SubRange> &subranges() const { return subranges_; }
-  const google::protobuf::FieldDescriptor *field_descriptor() const {
+  const std::vector<SubRange>& subranges() const { return subranges_; }
+  const google::protobuf::FieldDescriptor* field_descriptor() const {
     return field_descriptor_;
   }
 
@@ -80,15 +80,15 @@
   // Private templated helper methods for intersection. The definitions are in
   // the .cc file.
   template <typename T>
-  SubRange IntersectSubrange(const SubRange &lhs_subrange,
-                             const SubRange &rhs_subrange) const;
+  SubRange IntersectSubrange(const SubRange& lhs_subrange,
+                             const SubRange& rhs_subrange) const;
   template <typename T>
-  void IntersectSubranges(const std::vector<SubRange> &lhs_subranges,
-                          const std::vector<SubRange> &rhs_subranges,
-                          std::vector<SubRange> &new_subranges) const;
+  void IntersectSubranges(const std::vector<SubRange>& lhs_subranges,
+                          const std::vector<SubRange>& rhs_subranges,
+                          std::vector<SubRange>& new_subranges) const;
   // The range consists of a union of a number of subranges.
   std::vector<SubRange> subranges_;
-  const google::protobuf::FieldDescriptor *field_descriptor_ = nullptr;
+  const google::protobuf::FieldDescriptor* field_descriptor_ = nullptr;
 };
 
 }  // namespace proto_fmt
diff --git a/mpact/sim/decoder/proto_encoding_group.cc b/mpact/sim/decoder/proto_encoding_group.cc
index 93be8e8..f311316 100644
--- a/mpact/sim/decoder/proto_encoding_group.cc
+++ b/mpact/sim/decoder/proto_encoding_group.cc
@@ -45,10 +45,10 @@
 using ::mpact::sim::machine_description::instruction_set::ToSnakeCase;
 
 struct FieldInfo {
-  const google::protobuf::FieldDescriptor *field;
-  const google::protobuf::OneofDescriptor *oneof;
-  QualifiedIdentCtx *ctx;
-  absl::btree_multimap<int64_t, const ProtoInstructionEncoding *> value_map;
+  const google::protobuf::FieldDescriptor* field;
+  const google::protobuf::OneofDescriptor* oneof;
+  QualifiedIdentCtx* ctx;
+  absl::btree_multimap<int64_t, const ProtoInstructionEncoding*> value_map;
   int64_t min_value = 0;
   int64_t max_value = 0;
   size_t unique_values = 0;
@@ -57,48 +57,48 @@
 
 using ConstraintValueRange = ProtoConstraintValueSet::SubRange;
 
-ProtoEncodingGroup::ProtoEncodingGroup(ProtoInstructionGroup *inst_group,
+ProtoEncodingGroup::ProtoEncodingGroup(ProtoInstructionGroup* inst_group,
                                        int level,
-                                       DecoderErrorListener *error_listener)
+                                       DecoderErrorListener* error_listener)
     : ProtoEncodingGroup(nullptr, inst_group, level, error_listener) {}
 
-ProtoEncodingGroup::ProtoEncodingGroup(ProtoEncodingGroup *parent,
-                                       ProtoInstructionGroup *inst_group,
+ProtoEncodingGroup::ProtoEncodingGroup(ProtoEncodingGroup* parent,
+                                       ProtoInstructionGroup* inst_group,
                                        int level,
-                                       DecoderErrorListener *error_listener)
+                                       DecoderErrorListener* error_listener)
     : inst_group_(inst_group),
       parent_(parent),
       error_listener_(error_listener),
       level_(level) {}
 
 ProtoEncodingGroup::~ProtoEncodingGroup() {
-  for (auto const &[unused, field_info] : field_map_) {
+  for (auto const& [unused, field_info] : field_map_) {
     delete field_info;
   }
   field_map_.clear();
-  for (auto const *enc : encoding_vec_) {
+  for (auto const* enc : encoding_vec_) {
     delete enc;
   }
   encoding_vec_.clear();
   inst_group_ = nullptr;
-  for (auto const *enc_group : encoding_group_vec_) {
+  for (auto const* enc_group : encoding_group_vec_) {
     delete enc_group;
   }
   encoding_group_vec_.clear();
 }
 
-void ProtoEncodingGroup::AddEncoding(ProtoInstructionEncoding *enc) {
+void ProtoEncodingGroup::AddEncoding(ProtoInstructionEncoding* enc) {
   // All constraints in equal_constraints are kEq constraints on integer
   // fields, or are kHas constraints which are kEq constraints on the
   // '_value()' function of the one_of field (which is an int value).
   // The first step is to determine which constraints differentiate the most
   // instructions in the encoding group.
-  for (auto *eq_constraint : enc->equal_constraints()) {
-    auto const *field = eq_constraint->field_descriptor;
-    auto const *oneof = field->containing_oneof();
-    auto const *expr = eq_constraint->expr;
+  for (auto* eq_constraint : enc->equal_constraints()) {
+    auto const* field = eq_constraint->field_descriptor;
+    auto const* oneof = field->containing_oneof();
+    auto const* expr = eq_constraint->expr;
     auto op = eq_constraint->op;
-    auto *qualifed_ident_ctx = eq_constraint->ctx->qualified_ident();
+    auto* qualifed_ident_ctx = eq_constraint->ctx->qualified_ident();
     int64_t value;  // Store the value in an int64_t.
     if (op == ConstraintType::kEq) {
       switch (expr->variant_type()) {
@@ -149,7 +149,7 @@
     // If the field_info doesn't exist, add a new field_info.
     auto name = field != nullptr ? field->name() : oneof->name();
     auto iter = field_map_.find(name);
-    FieldInfo *field_info = nullptr;
+    FieldInfo* field_info = nullptr;
     if (iter == field_map_.end()) {
       field_info = new FieldInfo{field, oneof};
       field_info->min_value = std::numeric_limits<int64_t>::max();
@@ -168,9 +168,9 @@
   encoding_vec_.push_back(enc);
   // Populate the other_* sets. These are used later to ensure that sub groups
   // aren't added with differentiators that are also used in other constraints.
-  for (auto *constraint : enc->other_constraints()) {
-    auto const *field = constraint->field_descriptor;
-    auto const *oneof = field->containing_oneof();
+  for (auto* constraint : enc->other_constraints()) {
+    auto const* field = constraint->field_descriptor;
+    auto const* oneof = field->containing_oneof();
     if (oneof != nullptr) {
       other_oneof_set_.insert(oneof);
       continue;
@@ -187,12 +187,12 @@
   // the number of total values in its interval.
   // To start with just pick the one with the largest number of unique values,
   // as that should create a shallower decoding tree.
-  FieldInfo *best_field = nullptr;
-  absl::flat_hash_set<ProtoInstructionEncoding *> encodings;
+  FieldInfo* best_field = nullptr;
+  absl::flat_hash_set<ProtoInstructionEncoding*> encodings;
   for (auto enc : encoding_vec_) {
     encodings.insert(enc);
   }
-  for (auto &[unused, field_info] : field_map_) {
+  for (auto& [unused, field_info] : field_map_) {
     // First check if the field is used in any other constraints, e.g., '>' or
     // '!='. If so, it is not a candidate for a direct lookup of the value.
     if (other_field_set_.contains(field_info->field)) continue;
@@ -221,7 +221,7 @@
   for (auto iter = best_field->value_map.begin();
        iter != best_field->value_map.end();
        /*empty*/) {
-    auto *enc_group =
+    auto* enc_group =
         new ProtoEncodingGroup(this, inst_group_, level_ + 1, error_listener_);
     int64_t value = iter->first;
     enc_group->set_value(value);
@@ -229,11 +229,11 @@
       // First create a copy of the encoding and remove the constraint
       // that corresponds with the field info, so it will not be considered
       // below.
-      ProtoInstructionEncoding *enc =
+      ProtoInstructionEncoding* enc =
           new ProtoInstructionEncoding(*(iter->second));
       // Remove the best_field constraint from the new encoding object.
       auto v_iter = enc->equal_constraints().begin();
-      ProtoConstraint *constraint = nullptr;
+      ProtoConstraint* constraint = nullptr;
       while (v_iter != enc->equal_constraints().end()) {
         constraint = *v_iter;
         if (constraint->op == ConstraintType::kEq) {
@@ -265,14 +265,14 @@
   // Any encodings remaining in the map have to be added to each of the sub
   // groups, as they weren't selected by value.
   for (auto enc : encodings) {
-    for (auto *enc_group : encoding_group_vec_) {
+    for (auto* enc_group : encoding_group_vec_) {
       auto enc_copy = new ProtoInstructionEncoding(*enc);
       enc_group->AddEncoding(enc_copy);
     }
   }
   encodings.clear();
   // Recursively try to split the child encoding groups.
-  for (auto *enc_group : encoding_group_vec_) {
+  for (auto* enc_group : encoding_group_vec_) {
     enc_group->AddSubGroups();
   }
 }
@@ -284,11 +284,11 @@
   // Encodings have to have additional constraints to differentiate between each
   // other, so check to see if any of them have none, and if so, signal an
   // error.
-  for (auto *enc : encoding_vec_) {
+  for (auto* enc : encoding_vec_) {
     if (enc->equal_constraints().empty() && enc->other_constraints().empty()) {
       std::string msg =
           absl::StrCat("Decoding ambiguity between '", enc->name(), "' and :");
-      for (auto *other_enc : encoding_vec_) {
+      for (auto* other_enc : encoding_vec_) {
         if (enc == other_enc) continue;
         absl::StrAppend(&msg, " '", other_enc->name(), "'");
       }
@@ -300,36 +300,36 @@
   // Check for identical or overlapping constraints.
 
   // First sort the constraints in each vector.
-  std::vector<std::vector<ProtoConstraint *>> constraints;
+  std::vector<std::vector<ProtoConstraint*>> constraints;
   constraints.reserve(encoding_vec_.size());
-  for (auto *enc : encoding_vec_) {
+  for (auto* enc : encoding_vec_) {
     constraints.push_back({});
-    for (auto *constraint : enc->equal_constraints()) {
+    for (auto* constraint : enc->equal_constraints()) {
       constraints.back().push_back(constraint);
     }
-    for (auto *constraint : enc->other_constraints()) {
+    for (auto* constraint : enc->other_constraints()) {
       constraints.back().push_back(constraint);
     }
   }
   for (int i = 0; i < constraints.size(); ++i) {
     std::sort(
         constraints[i].begin(), constraints[i].end(),
-        [](const ProtoConstraint *lhs, const ProtoConstraint *rhs) -> bool {
+        [](const ProtoConstraint* lhs, const ProtoConstraint* rhs) -> bool {
           return lhs->field_descriptor->full_name() <
                  rhs->field_descriptor->full_name();
         });
   }
   // Now create value value sets for each field descriptor, combining multiple
   // constraints on the same field descriptor into a single set of values.
-  std::vector<std::vector<ProtoConstraintValueSet *>> value_sets;
+  std::vector<std::vector<ProtoConstraintValueSet*>> value_sets;
   value_sets.reserve(encoding_vec_.size());
-  for (auto const &constraint_vec : constraints) {
-    const google::protobuf::FieldDescriptor *previous = nullptr;
+  for (auto const& constraint_vec : constraints) {
+    const google::protobuf::FieldDescriptor* previous = nullptr;
     value_sets.push_back({});
-    for (auto const *constraint : constraint_vec) {
+    for (auto const* constraint : constraint_vec) {
       // If it's the first occurance of a field descriptor, create a new
       // range on this constraint.
-      ProtoConstraintValueSet *value_set = nullptr;
+      ProtoConstraintValueSet* value_set = nullptr;
       if (previous != constraint->field_descriptor) {
         previous = constraint->field_descriptor;
         value_set = new ProtoConstraintValueSet(constraint);
@@ -343,8 +343,8 @@
       // Check for error.
       if (!status.ok()) {
         // Clean up.
-        for (auto &value_set_list : value_sets) {
-          for (auto *value_set : value_set_list) delete value_set;
+        for (auto& value_set_list : value_sets) {
+          for (auto* value_set : value_set_list) delete value_set;
         }
         value_sets.clear();
         // Signal error.
@@ -365,16 +365,16 @@
     }
   }
   // Clean up.
-  for (auto &value_set_list : value_sets) {
-    for (auto *value_set : value_set_list) delete value_set;
+  for (auto& value_set_list : value_sets) {
+    for (auto* value_set : value_set_list) delete value_set;
   }
 }
 
 // Determine if the constraints overlap for two encodings lhs and rhs based on
 // the value sets.
 bool ProtoEncodingGroup::DoConstraintsOverlap(
-    const std::vector<ProtoConstraintValueSet *> &lhs,
-    const std::vector<ProtoConstraintValueSet *> &rhs) {
+    const std::vector<ProtoConstraintValueSet*>& lhs,
+    const std::vector<ProtoConstraintValueSet*>& rhs) {
   auto iter_lhs = lhs.begin();
   auto iter_rhs = rhs.begin();
   while ((iter_lhs != lhs.end()) && (iter_rhs != rhs.end())) {
@@ -433,7 +433,7 @@
 
   // Helper lambda.
   auto generate_condition =
-      [](const ProtoConstraint *constraint) -> std::string {
+      [](const ProtoConstraint* constraint) -> std::string {
     std::string output;
     if (constraint->op == ConstraintType::kHas) {
       std::string ident = constraint->ctx->qualified_ident()->getText();
@@ -466,15 +466,15 @@
   // Generate a chained if-else if-else-statement for the encodings in the
   // encoding vector.
   std::string indent_body(indent_width + 2, ' ');
-  for (auto *enc : encoding_vec_) {
+  for (auto* enc : encoding_vec_) {
     // Generate the if statement conditions.
     absl::StrAppend(&output, indent, if_sep, "if (");
     std::string cond_sep;
-    for (auto const *constraint : enc->equal_constraints()) {
+    for (auto const* constraint : enc->equal_constraints()) {
       absl::StrAppend(&output, cond_sep, generate_condition(constraint));
       cond_sep = " && ";
     }
-    for (auto const *constraint : enc->other_constraints()) {
+    for (auto const* constraint : enc->other_constraints()) {
       absl::StrAppend(&output, cond_sep, generate_condition(constraint));
       cond_sep = " && ";
     }
@@ -498,7 +498,7 @@
 
 namespace {
 
-bool LessThan(ProtoEncodingGroup *lhs, ProtoEncodingGroup *rhs) {
+bool LessThan(ProtoEncodingGroup* lhs, ProtoEncodingGroup* rhs) {
   return lhs->value() < rhs->value();
 }
 
@@ -527,7 +527,7 @@
         "absl::NoDestructor<absl::flat_hash_map<int32_t, std::function<",
         opcode_enum, "(", message_type_name, ", ", decoder_class, "*)>>> ",
         map_name, "({\n");
-    for (auto *enc_group : encoding_group_vec_) {
+    for (auto* enc_group : encoding_group_vec_) {
       auto enc_value = enc_group->value();
       absl::StrAppend(&output, "  {", enc_value, ", ", fcn_name, "_", enc_value,
                       "},\n");
@@ -582,7 +582,7 @@
     absl::string_view message_type_name) {
   std::string output;
   // Emit decoders for subordinate groups (lower in the hierarchy).
-  for (auto *enc_group : encoding_group_vec_) {
+  for (auto* enc_group : encoding_group_vec_) {
     absl::StrAppend(
         &output,
         enc_group->EmitDecoders(absl::StrCat(fcn_name, "_", enc_group->value()),
diff --git a/mpact/sim/decoder/proto_encoding_group.h b/mpact/sim/decoder/proto_encoding_group.h
index ceace1b..200cd7f 100644
--- a/mpact/sim/decoder/proto_encoding_group.h
+++ b/mpact/sim/decoder/proto_encoding_group.h
@@ -47,21 +47,21 @@
 class ProtoEncodingGroup {
  public:
   // Constructor for a top level encoding group with no field differentiator.
-  ProtoEncodingGroup(ProtoInstructionGroup *inst_group, int level,
-                     DecoderErrorListener *error_listener);
+  ProtoEncodingGroup(ProtoInstructionGroup* inst_group, int level,
+                     DecoderErrorListener* error_listener);
   // Constructor for a child encoding group.
-  ProtoEncodingGroup(ProtoEncodingGroup *parent,
-                     ProtoInstructionGroup *inst_group, int level,
-                     DecoderErrorListener *error_listener);
+  ProtoEncodingGroup(ProtoEncodingGroup* parent,
+                     ProtoInstructionGroup* inst_group, int level,
+                     DecoderErrorListener* error_listener);
   // Deleted constructors.
   ProtoEncodingGroup() = delete;
-  ProtoEncodingGroup(const ProtoEncodingGroup &) = delete;
-  ProtoEncodingGroup &operator=(const ProtoEncodingGroup &) = delete;
+  ProtoEncodingGroup(const ProtoEncodingGroup&) = delete;
+  ProtoEncodingGroup& operator=(const ProtoEncodingGroup&) = delete;
   // Destructor.
   ~ProtoEncodingGroup();
 
   // Add encoding to the current group.
-  void AddEncoding(ProtoInstructionEncoding *encoding);
+  void AddEncoding(ProtoInstructionEncoding* encoding);
   // Process the encodings in this group and divide them into subgroups based
   // on their constraint value for the differentiating field.
   void AddSubGroups();
@@ -71,7 +71,7 @@
                            absl::string_view message_type_name);
 
   // Getters/Setters.
-  DecoderErrorListener *error_listener() const { return error_listener_; }
+  DecoderErrorListener* error_listener() const { return error_listener_; }
   int64_t value() const { return value_; }
   void set_value(int64_t value) { value_ = value; }
   int level() const { return level_; }
@@ -81,8 +81,8 @@
   // there are no encoding ambiguities, such as multiple opcodes with the same
   // encoding, etc.
   void CheckEncodings();
-  bool DoConstraintsOverlap(const std::vector<ProtoConstraintValueSet *> &lhs,
-                            const std::vector<ProtoConstraintValueSet *> &rhs);
+  bool DoConstraintsOverlap(const std::vector<ProtoConstraintValueSet*>& lhs,
+                            const std::vector<ProtoConstraintValueSet*>& rhs);
   // Create C++ code for leaf (encoding group) instruction decoder.
   std::string EmitLeafDecoder(absl::string_view fcn_name,
                               absl::string_view opcode_enum,
@@ -93,18 +93,18 @@
                                  absl::string_view opcode_enum,
                                  absl::string_view message_type_name);
 
-  ProtoInstructionGroup *inst_group_ = nullptr;
-  ProtoEncodingGroup *parent_ = nullptr;
-  DecoderErrorListener *error_listener_ = nullptr;
-  FieldInfo *differentiator_ = nullptr;
+  ProtoInstructionGroup* inst_group_ = nullptr;
+  ProtoEncodingGroup* parent_ = nullptr;
+  DecoderErrorListener* error_listener_ = nullptr;
+  FieldInfo* differentiator_ = nullptr;
   int64_t value_;
   int level_;
-  std::vector<ProtoInstructionEncoding *> encoding_vec_;
-  std::vector<ProtoEncodingGroup *> encoding_group_vec_;
-  absl::btree_map<std::string, FieldInfo *> field_map_;
-  absl::flat_hash_set<const google::protobuf::FieldDescriptor *>
+  std::vector<ProtoInstructionEncoding*> encoding_vec_;
+  std::vector<ProtoEncodingGroup*> encoding_group_vec_;
+  absl::btree_map<std::string, FieldInfo*> field_map_;
+  absl::flat_hash_set<const google::protobuf::FieldDescriptor*>
       other_field_set_;
-  absl::flat_hash_set<const google::protobuf::OneofDescriptor *>
+  absl::flat_hash_set<const google::protobuf::OneofDescriptor*>
       other_oneof_set_;
 };
 
diff --git a/mpact/sim/decoder/proto_encoding_info.cc b/mpact/sim/decoder/proto_encoding_info.cc
index 1ced0e7..1c01936 100644
--- a/mpact/sim/decoder/proto_encoding_info.cc
+++ b/mpact/sim/decoder/proto_encoding_info.cc
@@ -41,8 +41,8 @@
 using ::mpact::sim::machine_description::instruction_set::ToSnakeCase;
 
 ProtoEncodingInfo::ProtoEncodingInfo(
-    const std::string &opcode_enum,
-    decoder::DecoderErrorListener *error_listener)
+    const std::string& opcode_enum,
+    decoder::DecoderErrorListener* error_listener)
     : opcode_enum_(opcode_enum), error_listener_(error_listener) {}
 
 ProtoEncodingInfo::~ProtoEncodingInfo() { delete decoder_; }
@@ -51,20 +51,20 @@
   include_files_.emplace(include_file);
 }
 
-ProtoInstructionDecoder *ProtoEncodingInfo::SetProtoDecoder(std::string name) {
+ProtoInstructionDecoder* ProtoEncodingInfo::SetProtoDecoder(std::string name) {
   if (decoder_ != nullptr) {
     error_listener_->semanticError(nullptr, "Can only select one decoder");
     return nullptr;
   }
-  auto *proto_decoder =
+  auto* proto_decoder =
       new ProtoInstructionDecoder(name, this, error_listener());
   decoder_ = proto_decoder;
   return proto_decoder;
 }
 
-absl::StatusOr<ProtoInstructionGroup *> ProtoEncodingInfo::AddInstructionGroup(
-    const std::string &group_name,
-    const google::protobuf::Descriptor *descriptor) {
+absl::StatusOr<ProtoInstructionGroup*> ProtoEncodingInfo::AddInstructionGroup(
+    const std::string& group_name,
+    const google::protobuf::Descriptor* descriptor) {
   // Make sure that the instruction group hasn't been added before.
   if (instruction_group_map_.contains(group_name)) {
     return absl::AlreadyExistsError(absl::StrCat(
@@ -78,7 +78,7 @@
 
 absl::Status ProtoEncodingInfo::CheckSetterType(
     absl::string_view name,
-    const google::protobuf::FieldDescriptor *field_desc) {
+    const google::protobuf::FieldDescriptor* field_desc) {
   // Is it a new setter, if so, just insert it.
   auto iter = setter_types_.find(name);
   auto cpp_type = field_desc->cpp_type();
@@ -188,7 +188,7 @@
   std::string decoder_def;
   std::string type_aliases;
   // Add type aliases for protobuf messages used in decoders.
-  for (auto *inst_group : decoder_->instruction_groups()) {
+  for (auto* inst_group : decoder_->instruction_groups()) {
     std::string qualified_message_type = absl::StrReplaceAll(
         inst_group->message_type()->full_name(), {{".", "::"}});
     absl::StrAppend(&type_aliases, "using ", ToPascalCase(inst_group->name()),
@@ -208,7 +208,7 @@
   }
   // Include files.
   absl::StrAppend(&h_output, "#include <cstdint>\n\n");
-  for (auto &include_file : include_files_) {
+  for (auto& include_file : include_files_) {
     absl::StrAppend(&h_output, "#include ", include_file, "\n");
   }
   absl::StrAppend(&h_output, "\n");
@@ -217,7 +217,7 @@
                   "#include \"absl/container/flat_hash_map.h\"\n\n");
   // Open namespaces.
   std::string name_space_ref = absl::StrJoin(decoder_->namespaces(), "::");
-  for (auto &name_space : decoder_->namespaces()) {
+  for (auto& name_space : decoder_->namespaces()) {
     absl::StrAppend(&h_output, "namespace ", name_space, " {\n");
     absl::StrAppend(&cc_output, "namespace ", name_space, " {\n");
   }
@@ -226,7 +226,7 @@
                   " public:\n", "  ", class_name, "() = default;\n\n");
   absl::StrAppend(&h_output, "  // Decode method(s).\n");
   std::string decoder_fcns;
-  for (auto *inst_group : decoder_->instruction_groups()) {
+  for (auto* inst_group : decoder_->instruction_groups()) {
     inst_group->ProcessEncodings(error_listener_);
     absl::StrAppend(&h_output, "  ", opcode_enum_, " Decode",
                     ToPascalCase(inst_group->name()), "(",
@@ -243,7 +243,7 @@
   if (error_listener_->HasError()) return {"", ""};
   absl::StrAppend(&cc_output, decoder_fcns);
   absl::StrAppend(&h_output, "\n  // Setters and getters.\n");
-  for (auto const &[name, cpp_type] : setter_types_) {
+  for (auto const& [name, cpp_type] : setter_types_) {
     auto cpp_type_name = GetCppTypeName(cpp_type);
     // Generate method declarations.
     absl::StrAppend(&h_output, "  void Set", ToPascalCase(name), "(",
diff --git a/mpact/sim/decoder/proto_encoding_info.h b/mpact/sim/decoder/proto_encoding_info.h
index 3c1e34b..a186cf0 100644
--- a/mpact/sim/decoder/proto_encoding_info.h
+++ b/mpact/sim/decoder/proto_encoding_info.h
@@ -45,47 +45,47 @@
 
 class ProtoEncodingInfo {
  public:
-  ProtoEncodingInfo(const std::string &opcode_enum,
-                    decoder::DecoderErrorListener *error_listener);
+  ProtoEncodingInfo(const std::string& opcode_enum,
+                    decoder::DecoderErrorListener* error_listener);
   ProtoEncodingInfo() = delete;
   ~ProtoEncodingInfo();
   // Add file to be included in the generated code.
   void AddIncludeFile(std::string include_file);
   // Create and return a proto instruction decoder object with the given name.
-  ProtoInstructionDecoder *SetProtoDecoder(std::string name);
+  ProtoInstructionDecoder* SetProtoDecoder(std::string name);
   // Create and return an instruction group object with the given name.
-  absl::StatusOr<ProtoInstructionGroup *> AddInstructionGroup(
-      const std::string &group_name,
-      const google::protobuf::Descriptor *descriptor);
+  absl::StatusOr<ProtoInstructionGroup*> AddInstructionGroup(
+      const std::string& group_name,
+      const google::protobuf::Descriptor* descriptor);
   // Check that the setter types are consistent.
   absl::Status CheckSetterType(
       absl::string_view name,
-      const google::protobuf::FieldDescriptor *field_desc);
+      const google::protobuf::FieldDescriptor* field_desc);
   // Generate the C++ .h and .cc file contents.
   StringPair GenerateDecoderClass();
 
   // Accessors.
-  DecoderErrorListener *error_listener() { return error_listener_; }
-  absl::flat_hash_map<std::string, ProtoInstructionGroup *> &
+  DecoderErrorListener* error_listener() { return error_listener_; }
+  absl::flat_hash_map<std::string, ProtoInstructionGroup*>&
   instruction_group_map() {
     return instruction_group_map_;
   }
-  const absl::btree_set<std::string> &include_files() const {
+  const absl::btree_set<std::string>& include_files() const {
     return include_files_;
   }
-  ProtoInstructionDecoder *decoder() const { return decoder_; }
+  ProtoInstructionDecoder* decoder() const { return decoder_; }
   absl::string_view opcode_enum() const { return opcode_enum_; }
 
  private:
   std::string opcode_enum_;
-  DecoderErrorListener *error_listener_;
+  DecoderErrorListener* error_listener_;
   // Map of all instruction groups.
-  absl::flat_hash_map<std::string, ProtoInstructionGroup *>
+  absl::flat_hash_map<std::string, ProtoInstructionGroup*>
       instruction_group_map_;
   // The include files are stored in a btree set so they can be iterated over
   // in alphabetic order.
   absl::btree_set<std::string> include_files_;
-  ProtoInstructionDecoder *decoder_ = nullptr;
+  ProtoInstructionDecoder* decoder_ = nullptr;
   // Map of all setter types.
   absl::btree_map<std::string, google::protobuf::FieldDescriptor::CppType>
       setter_types_;
diff --git a/mpact/sim/decoder/proto_format_gen_main.cc b/mpact/sim/decoder/proto_format_gen_main.cc
index e446a33..3b89c5e 100644
--- a/mpact/sim/decoder/proto_format_gen_main.cc
+++ b/mpact/sim/decoder/proto_format_gen_main.cc
@@ -41,7 +41,7 @@
 
 static constexpr char kRootDir[] = "";
 
-int main(int argc, char **argv) {
+int main(int argc, char** argv) {
   // Process the command line options.
   auto arg_vec = absl::ParseCommandLine(argc, argv);
 
diff --git a/mpact/sim/decoder/proto_format_visitor.cc b/mpact/sim/decoder/proto_format_visitor.cc
index 4d91176..c62acc5 100644
--- a/mpact/sim/decoder/proto_format_visitor.cc
+++ b/mpact/sim/decoder/proto_format_visitor.cc
@@ -57,7 +57,7 @@
 
 namespace {
 
-std::string StripQuotes(const std::string &str) {
+std::string StripQuotes(const std::string& str) {
   return str.substr(1, str.length() - 2);
 }
 
@@ -68,8 +68,8 @@
     : public google::protobuf::compiler::MultiFileErrorCollector {
  public:
   MultiFileErrorCollector() {}
-  MultiFileErrorCollector(const MultiFileErrorCollector &) = delete;
-  MultiFileErrorCollector &operator=(const MultiFileErrorCollector &) = delete;
+  MultiFileErrorCollector(const MultiFileErrorCollector&) = delete;
+  MultiFileErrorCollector& operator=(const MultiFileErrorCollector&) = delete;
 
   void RecordError(absl::string_view filename, int line, int column,
                    absl::string_view message) override {
@@ -78,7 +78,7 @@
     absl::StrAppend(&error_, "Line ", line, " Column ", column, ": ", message,
                     "\n");
   }
-  const std::string &GetError() const { return error_; }
+  const std::string& GetError() const { return error_; }
 
  private:
   std::string error_;
@@ -95,18 +95,18 @@
 //   proto_files: vector of .proto files to import.
 //   directory: target directory to generate the C++ files in.
 absl::Status ProtoFormatVisitor::Process(
-    const std::vector<std::string> &file_names, const std::string &decoder_name,
-    std::string_view prefix, const std::vector<std::string> &include_roots,
-    const std::vector<std::string> &proto_dirs,
-    const std::vector<std::string> &proto_files, std::string_view directory) {
+    const std::vector<std::string>& file_names, const std::string& decoder_name,
+    std::string_view prefix, const std::vector<std::string>& include_roots,
+    const std::vector<std::string>& proto_dirs,
+    const std::vector<std::string>& proto_files, std::string_view directory) {
   decoder_name_ = decoder_name;
 
   include_dir_vec_.push_back(".");
-  for (const auto &root : include_roots) {
+  for (const auto& root : include_roots) {
     include_dir_vec_.push_back(root);
   }
 
-  std::istream *source_stream = &std::cin;
+  std::istream* source_stream = &std::cin;
 
   if (!file_names.empty()) {
     source_stream = new std::fstream(file_names[0], std::fstream::in);
@@ -125,15 +125,15 @@
   // proto files from.
   google::protobuf::compiler::DiskSourceTree source_tree;
   source_tree.MapPath("", "./");
-  for (auto const &proto_dir : proto_dirs) {
+  for (auto const& proto_dir : proto_dirs) {
     source_tree.MapPath("", proto_dir);
   }
   // Import the proto files.
   MultiFileErrorCollector proto_error_collector;
   google::protobuf::compiler::Importer importer(&source_tree,
                                                 &proto_error_collector);
-  for (auto const &proto_file : proto_files) {
-    auto *file_desc = importer.Import(proto_file);
+  for (auto const& proto_file : proto_files) {
+    auto* file_desc = importer.Import(proto_file);
     if (file_desc == nullptr) {
       error_listener()->semanticError(
           nullptr, absl::StrCat("Failed to import '", proto_file, "'"));
@@ -162,7 +162,7 @@
       &google::protobuf::DescriptorPool::FindEnumValueByName, descriptor_pool_);
 
   // Parse the file and then create the data structures.
-  TopLevelCtx *top_level = parser_wrapper.parser()->top_level();
+  TopLevelCtx* top_level = parser_wrapper.parser()->top_level();
   (void)top_level;
   if (!file_names.empty()) {
     delete source_stream;
@@ -243,24 +243,24 @@
 
 // Helper templated function used to find proto objects by name.
 template <typename T>
-const T *ProtoFormatVisitor::FindByName(
-    const std::string &name, const std::string &message_name,
-    std::function<const T *(const std::string &)> finder) const {
-  auto *object = finder(Expand(message_name + "." + name));
+const T* ProtoFormatVisitor::FindByName(
+    const std::string& name, const std::string& message_name,
+    std::function<const T*(const std::string&)> finder) const {
+  auto* object = finder(Expand(message_name + "." + name));
   if (object != nullptr) return object;
   object = finder(Expand(name));
   return object;
 }
 
-const google::protobuf::FieldDescriptor *ProtoFormatVisitor::GetField(
-    const std::string &field_name,
-    const google::protobuf::Descriptor *message_type,
-    std::vector<const google::protobuf::FieldDescriptor *> &one_of_fields)
+const google::protobuf::FieldDescriptor* ProtoFormatVisitor::GetField(
+    const std::string& field_name,
+    const google::protobuf::Descriptor* message_type,
+    std::vector<const google::protobuf::FieldDescriptor*>& one_of_fields)
     const {
   auto pos = field_name.find_first_of('.');
   // If this is a "leaf" field, find it and return if found.
   if (pos == std::string::npos) {
-    auto *field_desc = message_type->FindFieldByName(field_name);
+    auto* field_desc = message_type->FindFieldByName(field_name);
     if (field_desc->containing_oneof() != nullptr) {
       one_of_fields.push_back(field_desc);
     }
@@ -269,18 +269,18 @@
   // Recursively traverse the components of the field name.
   std::string field = field_name.substr(0, pos);
   std::string remainder = field_name.substr(pos + 1);
-  auto const *field_desc = message_type->FindFieldByName(field);
+  auto const* field_desc = message_type->FindFieldByName(field);
   if (field_desc == nullptr) return nullptr;
   if (field_desc->containing_oneof() != nullptr) {
     one_of_fields.push_back(field_desc);
   }
-  auto const *message_desc = field_desc->message_type();
+  auto const* message_desc = field_desc->message_type();
   if (message_desc == nullptr) return nullptr;
   return GetField(remainder, message_desc, one_of_fields);
 }
 
-const google::protobuf::EnumValueDescriptor *
-ProtoFormatVisitor::GetEnumValueDescriptor(const std::string &full_name) const {
+const google::protobuf::EnumValueDescriptor*
+ProtoFormatVisitor::GetEnumValueDescriptor(const std::string& full_name) const {
   std::string expanded = Expand(full_name);
   auto pos = expanded.find_last_of('.');
   // If this is a "leaf", it fails. The enum must be qualified by enum type.
@@ -290,17 +290,17 @@
   std::string enum_name = expanded.substr(pos + 1);
   std::string enum_type_name = expanded.substr(0, pos);
   // Find the enum type.
-  auto const *enum_type_desc =
+  auto const* enum_type_desc =
       descriptor_pool_->FindEnumTypeByName(enum_type_name);
   if (enum_type_desc == nullptr) return nullptr;
   // Find the enum value in the enum type.
-  auto const *enum_value_desc = enum_type_desc->FindValueByName(enum_name);
+  auto const* enum_value_desc = enum_type_desc->FindValueByName(enum_name);
   return enum_value_desc;
 }
 
 absl::StatusOr<int> ProtoFormatVisitor::GetEnumValue(
-    const std::string &enum_name) const {
-  auto *enum_value_desc = GetEnumValueDescriptor(enum_name);
+    const std::string& enum_name) const {
+  auto* enum_value_desc = GetEnumValueDescriptor(enum_name);
   if (enum_value_desc == nullptr) {
     return absl::NotFoundError(
         absl::StrCat("Enum '", enum_name, "' not found"));
@@ -309,9 +309,9 @@
 }
 
 void ProtoFormatVisitor::PreProcessDeclarations(
-    const std::vector<DeclarationCtx *> &declarations) {
-  std::vector<IncludeFileCtx *> include_files;
-  for (auto *declaration : declarations) {
+    const std::vector<DeclarationCtx*>& declarations) {
+  std::vector<IncludeFileCtx*> include_files;
+  for (auto* declaration : declarations) {
     // Create map from instruction group name to instruction group ctx. That
     // way we can visit those that are referenced by the decoder definition
     // later.
@@ -355,7 +355,7 @@
     }
     // Create a map from decoder definitions to their parse contexts.
     if (declaration->decoder_def() != nullptr) {
-      auto *decoder = declaration->decoder_def();
+      auto* decoder = declaration->decoder_def();
       auto name = decoder->name->getText();
       auto iter = decoder_decl_map_.find(name);
       if (iter != decoder_decl_map_.end()) {
@@ -372,19 +372,19 @@
     include_files.push_back(declaration->include_file());
   }
   // Visit all the include files captured above.
-  for (auto *include_file_ctx : include_files) {
+  for (auto* include_file_ctx : include_files) {
     VisitIncludeFile(include_file_ctx);
   }
 }
 
-void ProtoFormatVisitor::VisitIncludeFile(IncludeFileCtx *ctx) {
+void ProtoFormatVisitor::VisitIncludeFile(IncludeFileCtx* ctx) {
   // The literal includes the double quotes.
   std::string literal = ctx->STRING_LITERAL()->getText();
   // Remove the double quotes from the literal and construct the full file name.
   std::string file_name = literal.substr(1, literal.length() - 2);
   // Check for recursive include by comparing the current name to those on the
   // current include file stack.
-  for (auto const &name : include_file_stack_) {
+  for (auto const& name : include_file_stack_) {
     if (name == file_name) {
       error_listener()->semanticError(
           ctx->start,
@@ -396,14 +396,14 @@
 }
 
 void ProtoFormatVisitor::ParseIncludeFile(
-    antlr4::ParserRuleContext *ctx, const std::string &file_name,
-    const std::vector<std::string> &dirs) {
+    antlr4::ParserRuleContext* ctx, const std::string& file_name,
+    const std::vector<std::string>& dirs) {
   std::fstream include_file;
   // Open include file.
   include_file.open(file_name, std::fstream::in);
   if (!include_file.is_open()) {
     // Try each of the include file directories.
-    for (auto const &dir : dirs) {
+    for (auto const& dir : dirs) {
       std::string include_name = absl::StrCat(dir, "/", file_name);
       include_file.open(include_name, std::fstream::in);
       if (include_file.is_open()) break;
@@ -420,7 +420,7 @@
   }
   std::string previous_file_name = error_listener()->file_name();
   error_listener()->set_file_name(std::string(file_name));
-  auto *include_parser = new ProtoFmtAntlrParserWrapper(&include_file);
+  auto* include_parser = new ProtoFmtAntlrParserWrapper(&include_file);
   // We need to save the parser state so it's available for analysis after
   // we are done with building the parse trees.
   antlr_parser_wrappers_.push_back(include_parser);
@@ -441,7 +441,7 @@
 }
 
 std::unique_ptr<ProtoEncodingInfo> ProtoFormatVisitor::ProcessTopLevel(
-    const std::string &decoder_name) {
+    const std::string& decoder_name) {
   // Look up the decoder declaration that matches the decoder name for which
   // to generate C++ code.
   auto decoder_iter = decoder_decl_map_.find(decoder_name);
@@ -455,14 +455,14 @@
 }
 
 // Process instruction groups.
-ProtoInstructionGroup *ProtoFormatVisitor::VisitInstructionGroupDef(
-    InstructionGroupDefCtx *ctx, ProtoEncodingInfo *encoding_info) {
+ProtoInstructionGroup* ProtoFormatVisitor::VisitInstructionGroupDef(
+    InstructionGroupDefCtx* ctx, ProtoEncodingInfo* encoding_info) {
   if (ctx == nullptr) return nullptr;
 
   std::string group_name = ctx->name->getText();
   // Verify that the message type exists.
   std::string message_name = Expand(ctx->message_name->getText());
-  auto const *message_desc =
+  auto const* message_desc =
       descriptor_pool_->FindMessageTypeByName(message_name);
   // If the message type doesn't exist, its an error
   if (message_desc == nullptr) {
@@ -480,22 +480,22 @@
     return nullptr;
   }
 
-  auto *inst_group = inst_group_res.value();
+  auto* inst_group = inst_group_res.value();
   // First visit all the setter declarations.
-  for (auto *group_def : ctx->setter_group_def()) {
+  for (auto* group_def : ctx->setter_group_def()) {
     VisitSetterGroupDef(group_def, inst_group, encoding_info);
   }
   // Parse the instruction encoding definitions in the instruction group.
-  for (auto *inst_def : ctx->instruction_def()) {
+  for (auto* inst_def : ctx->instruction_def()) {
     VisitInstructionDef(inst_def, inst_group, encoding_info);
   }
   return inst_group;
 }
 
 // Process instruction definitions.
-void ProtoFormatVisitor::VisitInstructionDef(InstructionDefCtx *ctx,
-                                             ProtoInstructionGroup *inst_group,
-                                             ProtoEncodingInfo *encoding_info) {
+void ProtoFormatVisitor::VisitInstructionDef(InstructionDefCtx* ctx,
+                                             ProtoInstructionGroup* inst_group,
+                                             ProtoEncodingInfo* encoding_info) {
   if (ctx == nullptr) return;
 
   // If it is a generator, call the generator parsing function.
@@ -505,17 +505,17 @@
   }
   // Get the instruction name.
   std::string name = ctx->name->getText();
-  auto *inst_encoding = inst_group->AddInstructionEncoding(name);
+  auto* inst_encoding = inst_group->AddInstructionEncoding(name);
   // Add Constraints to the instruction encoding.
-  for (auto *constraint : ctx->field_constraint_list()->field_constraint()) {
+  for (auto* constraint : ctx->field_constraint_list()->field_constraint()) {
     VisitFieldConstraint(constraint, inst_encoding, inst_group);
   }
   // Visit references to setters defined in the instruction group.
-  for (auto *setter : ctx->setter_ref()) {
+  for (auto* setter : ctx->setter_ref()) {
     VisitSetterRef(setter, inst_encoding, inst_group, encoding_info);
   }
   // Visit locally (to the instruction) defined setters.
-  for (auto *setter : ctx->setter_def()) {
+  for (auto* setter : ctx->setter_def()) {
     VisitSetterDef(setter, inst_encoding, inst_group, encoding_info);
   }
   // Generate the setter code template.
@@ -523,8 +523,8 @@
 }
 
 void ProtoFormatVisitor::VisitFieldConstraint(
-    FieldConstraintCtx *ctx, ProtoInstructionEncoding *inst_encoding,
-    const ProtoInstructionGroup *inst_group) {
+    FieldConstraintCtx* ctx, ProtoInstructionEncoding* inst_encoding,
+    const ProtoInstructionGroup* inst_group) {
   if (ctx == nullptr) return;
 
   // Constraints are based on field names ==/!=/>/>=/</<= to a value, or
@@ -535,8 +535,8 @@
   absl::Status status;
   if (ctx->HAS() != nullptr) {
     std::string field_name = ctx->qualified_ident()->getText();
-    std::vector<const google::protobuf::FieldDescriptor *> one_of_fields;
-    auto *field_desc =
+    std::vector<const google::protobuf::FieldDescriptor*> one_of_fields;
+    auto* field_desc =
         GetField(field_name, inst_group->message_type(), one_of_fields);
     if (field_desc == nullptr) {
       error_listener()->semanticError(
@@ -557,8 +557,8 @@
     // The field name is relative to the message type, but may refer to fields
     // in sub-messages contained within that message.
     std::string field_name = ctx->field->getText();
-    std::vector<const google::protobuf::FieldDescriptor *> one_of_fields;
-    auto *field_desc =
+    std::vector<const google::protobuf::FieldDescriptor*> one_of_fields;
+    auto* field_desc =
         GetField(field_name, inst_group->message_type(), one_of_fields);
     if (field_desc == nullptr) {
       error_listener()->semanticError(
@@ -569,7 +569,7 @@
     }
     std::string op = ctx->constraint_op()->getText();
 
-    auto *constraint_expr = VisitConstraintExpression(ctx->constraint_expr(),
+    auto* constraint_expr = VisitConstraintExpression(ctx->constraint_expr(),
                                                       field_desc, inst_group);
 
     // Add the constraint according to the type.
@@ -598,11 +598,11 @@
   }
 }
 
-ProtoConstraintExpression *ProtoFormatVisitor::VisitConstraintExpression(
-    ConstraintExprCtx *ctx, const google::protobuf::FieldDescriptor *field_desc,
-    const ProtoInstructionGroup *inst_group) {
+ProtoConstraintExpression* ProtoFormatVisitor::VisitConstraintExpression(
+    ConstraintExprCtx* ctx, const google::protobuf::FieldDescriptor* field_desc,
+    const ProtoInstructionGroup* inst_group) {
   if (ctx == nullptr) return nullptr;
-  ProtoConstraintExpression *constraint_expr = nullptr;
+  ProtoConstraintExpression* constraint_expr = nullptr;
   if (ctx->value() != nullptr) {
     constraint_expr = VisitValue(ctx->value());
   } else if (ctx->qualified_ident() != nullptr) {
@@ -612,7 +612,7 @@
   return constraint_expr;
 }
 
-ProtoConstraintExpression *ProtoFormatVisitor::VisitValue(ValueCtx *ctx) {
+ProtoConstraintExpression* ProtoFormatVisitor::VisitValue(ValueCtx* ctx) {
   if (ctx == nullptr) return nullptr;
   if (ctx->number() != nullptr) {
     return VisitNumber(ctx->number());
@@ -630,7 +630,7 @@
   return nullptr;
 }
 
-ProtoConstraintExpression *ProtoFormatVisitor::VisitNumber(NumberCtx *ctx) {
+ProtoConstraintExpression* ProtoFormatVisitor::VisitNumber(NumberCtx* ctx) {
   std::string num_str = ctx->getText();
   // Convert to lower case to avoid capital chars in suffix.
   for (int i = 0; i < num_str.size(); ++i) num_str[i] = tolower(num_str[i]);
@@ -690,9 +690,9 @@
 }
 
 // Visits a qualified identifier that specifies an enumerator value.
-ProtoConstraintExpression *ProtoFormatVisitor::VisitQualifiedIdent(
-    QualifiedIdentCtx *ctx, const google::protobuf::FieldDescriptor *field_desc,
-    const ProtoInstructionGroup *inst_group) {
+ProtoConstraintExpression* ProtoFormatVisitor::VisitQualifiedIdent(
+    QualifiedIdentCtx* ctx, const google::protobuf::FieldDescriptor* field_desc,
+    const ProtoInstructionGroup* inst_group) {
   if (ctx == nullptr) return nullptr;
   // Verify that the field is an enum.
   if (field_desc->enum_type() == nullptr) {
@@ -702,7 +702,7 @@
     return nullptr;
   }
   // Look up the value (if it exists).
-  auto const *enum_value_desc =
+  auto const* enum_value_desc =
       field_desc->enum_type()->FindValueByName(ctx->getText());
   if (enum_value_desc == nullptr) {
     error_listener()->semanticError(
@@ -714,16 +714,16 @@
 }
 
 // Process the instruction group setters.
-void ProtoFormatVisitor::VisitSetterGroupDef(SetterGroupDefCtx *ctx,
-                                             ProtoInstructionGroup *inst_group,
-                                             ProtoEncodingInfo *encoding_info) {
+void ProtoFormatVisitor::VisitSetterGroupDef(SetterGroupDefCtx* ctx,
+                                             ProtoInstructionGroup* inst_group,
+                                             ProtoEncodingInfo* encoding_info) {
   if (ctx == nullptr) return;
   auto group_name = ctx->name->getText();
-  for (auto *setter_def : ctx->setter_def()) {
+  for (auto* setter_def : ctx->setter_def()) {
     std::string name = setter_def->name->getText();
     std::string field_name = setter_def->qualified_ident()->getText();
-    std::vector<const google::protobuf::FieldDescriptor *> one_of_fields;
-    auto const *field_desc =
+    std::vector<const google::protobuf::FieldDescriptor*> one_of_fields;
+    auto const* field_desc =
         GetField(field_name, inst_group->message_type(), one_of_fields);
     if (field_desc == nullptr) {
       error_listener()->semanticError(
@@ -733,7 +733,7 @@
       return;
     }
 
-    IfNotCtx *if_not = setter_def->if_not();
+    IfNotCtx* if_not = setter_def->if_not();
     auto status = encoding_info->CheckSetterType(name, field_desc);
     if (!status.ok()) {
       error_listener()->semanticError(setter_def->start, status.message());
@@ -749,15 +749,15 @@
 }
 
 // Process local (to instruction) setters.
-void ProtoFormatVisitor::VisitSetterDef(SetterDefCtx *ctx,
-                                        ProtoInstructionEncoding *inst_encoding,
-                                        ProtoInstructionGroup *inst_group,
-                                        ProtoEncodingInfo *encoding_info) {
+void ProtoFormatVisitor::VisitSetterDef(SetterDefCtx* ctx,
+                                        ProtoInstructionEncoding* inst_encoding,
+                                        ProtoInstructionGroup* inst_group,
+                                        ProtoEncodingInfo* encoding_info) {
   if (ctx == nullptr) return;
   std::string name = ctx->name->getText();
   std::string field_name = ctx->qualified_ident()->getText();
-  std::vector<const google::protobuf::FieldDescriptor *> one_of_fields;
-  auto const *field_desc =
+  std::vector<const google::protobuf::FieldDescriptor*> one_of_fields;
+  auto const* field_desc =
       GetField(field_name, inst_group->message_type(), one_of_fields);
   if (field_desc == nullptr) {
     error_listener()->semanticError(
@@ -767,7 +767,7 @@
     return;
   }
 
-  IfNotCtx *if_not = ctx->if_not();
+  IfNotCtx* if_not = ctx->if_not();
   auto status = encoding_info->CheckSetterType(name, field_desc);
   if (!status.ok()) {
     error_listener()->semanticError(ctx->start, status.message());
@@ -782,10 +782,10 @@
 }
 
 // Process references to instruction group setters.
-void ProtoFormatVisitor::VisitSetterRef(SetterRefCtx *ctx,
-                                        ProtoInstructionEncoding *inst_encoding,
-                                        ProtoInstructionGroup *inst_group,
-                                        ProtoEncodingInfo *encoding_info) {
+void ProtoFormatVisitor::VisitSetterRef(SetterRefCtx* ctx,
+                                        ProtoInstructionEncoding* inst_encoding,
+                                        ProtoInstructionGroup* inst_group,
+                                        ProtoEncodingInfo* encoding_info) {
   if (ctx == nullptr) return;
   auto res = inst_group->GetSetterGroup(ctx->name->getText());
   if (!res.ok()) {
@@ -794,7 +794,7 @@
   }
   auto [iter, end] = res.value();
   while (iter != end) {
-    auto *setter_info = iter->second;
+    auto* setter_info = iter->second;
     auto status = inst_encoding->AddSetter(
         setter_info->ctx, setter_info->name, setter_info->field_desc,
         setter_info->one_of_fields, setter_info->if_not);
@@ -809,20 +809,20 @@
 
 // Process the instruction definition generators.
 void ProtoFormatVisitor::ProcessInstructionDefGenerator(
-    InstructionDefCtx *ctx, ProtoInstructionGroup *inst_group,
-    ProtoEncodingInfo *encoding_info) {
+    InstructionDefCtx* ctx, ProtoInstructionGroup* inst_group,
+    ProtoEncodingInfo* encoding_info) {
   if (ctx == nullptr) return;
   absl::flat_hash_set<std::string> range_variable_names;
-  std::vector<RangeAssignmentInfo *> range_info_vec;
+  std::vector<RangeAssignmentInfo*> range_info_vec;
 
   // Process range assignment lists. The range assignment is either a single
   // value or a structured binding assignment. If it's a binding assignment we
   // need to make sure each tuple has the same number of values as there are
   // idents to assign them to.
-  for (auto *assign_ctx : ctx->range_assignment()) {
-    auto *range_info = new RangeAssignmentInfo();
+  for (auto* assign_ctx : ctx->range_assignment()) {
+    auto* range_info = new RangeAssignmentInfo();
     range_info_vec.push_back(range_info);
-    for (auto *ident_ctx : assign_ctx->IDENT()) {
+    for (auto* ident_ctx : assign_ctx->IDENT()) {
       std::string name = ident_ctx->getText();
       if (range_variable_names.contains(name)) {
         error_listener()->semanticError(
@@ -845,7 +845,7 @@
     }
     // See if it's a list of simple values.
     if (!assign_ctx->gen_value().empty()) {
-      for (auto *gen_value_ctx : assign_ctx->gen_value()) {
+      for (auto* gen_value_ctx : assign_ctx->gen_value()) {
         if (gen_value_ctx->IDENT() != nullptr) {
           range_info->range_values[0].push_back(
               gen_value_ctx->IDENT()->getText());
@@ -867,10 +867,10 @@
       continue;
     }
     // It's a list of tuples with a structured binding assignment.
-    for (auto *tuple_ctx : assign_ctx->tuple()) {
+    for (auto* tuple_ctx : assign_ctx->tuple()) {
       if (tuple_ctx->gen_value().size() != range_info->range_names.size()) {
         // Clean up.
-        for (auto *info : range_info_vec) delete info;
+        for (auto* info : range_info_vec) delete info;
         error_listener_->semanticError(
             assign_ctx->start,
             "Number of values differs from number of identifiers");
@@ -919,7 +919,7 @@
   }
   if (error_listener()->HasError()) {
     // Clean up.
-    for (auto *info : range_info_vec) delete info;
+    for (auto* info : range_info_vec) delete info;
     return;
   }
 
@@ -928,22 +928,22 @@
   std::string generated_text =
       GenerateInstructionDefList(range_info_vec, 0, input_text);
   // Parse and process the generated text.
-  auto *parser = new ProtoFmtAntlrParserWrapper(generated_text);
+  auto* parser = new ProtoFmtAntlrParserWrapper(generated_text);
   antlr_parser_wrappers_.push_back(parser);
   // Parse the text starting at the opcode_spec_list rule.
   auto instruction_defs =
       parser->parser()->instruction_group_def()->instruction_def();
   // Process the opcode spec.
-  for (auto *inst_def : instruction_defs) {
+  for (auto* inst_def : instruction_defs) {
     VisitInstructionDef(inst_def, inst_group, encoding_info);
   }
   // Clean up.
-  for (auto *info : range_info_vec) delete info;
+  for (auto* info : range_info_vec) delete info;
 }
 
 std::string ProtoFormatVisitor::GenerateInstructionDefList(
-    const std::vector<RangeAssignmentInfo *> &range_info_vec, int index,
-    const std::string &template_str_in) const {
+    const std::vector<RangeAssignmentInfo*>& range_info_vec, int index,
+    const std::string& template_str_in) const {
   std::string generated;
   // Iterate for the number of values.
   for (int i = 0; i < range_info_vec[index]->range_values[0].size(); ++i) {
@@ -953,7 +953,7 @@
     // current set of values.
     int var_index = 0;
     int replace_count = 0;
-    for (auto &re : range_info_vec[index]->range_regexes) {
+    for (auto& re : range_info_vec[index]->range_regexes) {
       replace_count += RE2::GlobalReplace(
           &template_str, re,
           range_info_vec[index]->range_values[var_index++][i]);
@@ -977,13 +977,13 @@
 }
 
 std::unique_ptr<ProtoEncodingInfo> ProtoFormatVisitor::VisitDecoderDef(
-    DecoderDefCtx *ctx) {
+    DecoderDefCtx* ctx) {
   if (ctx == nullptr) return nullptr;
 
   // First get the opcode enum.
   int opcode_count = 0;
   std::string opcode_enum;
-  for (auto *attr_ctx : ctx->decoder_attribute()) {
+  for (auto* attr_ctx : ctx->decoder_attribute()) {
     if (attr_ctx->opcode_enum_decl() != nullptr) {
       auto opcode_enum_literal =
           attr_ctx->opcode_enum_decl()->STRING_LITERAL()->getText();
@@ -1005,15 +1005,15 @@
   std::string name = ctx->name->getText();
   auto encoding_info =
       std::make_unique<ProtoEncodingInfo>(opcode_enum, error_listener_.get());
-  auto *decoder = encoding_info->SetProtoDecoder(name);
+  auto* decoder = encoding_info->SetProtoDecoder(name);
   if (decoder == nullptr) return nullptr;
   absl::flat_hash_set<std::string> group_name_set;
   int namespace_count = 0;
   // Iterate over the decoder attributes.
-  for (auto *attr_ctx : ctx->decoder_attribute()) {
+  for (auto* attr_ctx : ctx->decoder_attribute()) {
     // Include files.
     if (attr_ctx->include_files() != nullptr) {
-      for (auto *file_ctx : attr_ctx->include_files()->include_file()) {
+      for (auto* file_ctx : attr_ctx->include_files()->include_file()) {
         auto include_text = file_ctx->STRING_LITERAL()->getText();
         encoding_info->AddIncludeFile(include_text);
       }
@@ -1022,7 +1022,7 @@
     // Namespace declaration.
     if (attr_ctx->namespace_decl() != nullptr) {
       auto decl = attr_ctx->namespace_decl();
-      for (auto *namespace_name : decl->namespace_ident()) {
+      for (auto* namespace_name : decl->namespace_ident()) {
         decoder->namespaces().push_back(namespace_name->getText());
       }
       if (namespace_count > 0) {
@@ -1058,8 +1058,8 @@
 }
 
 void ProtoFormatVisitor::ProcessSingleGroup(
-    DecoderAttributeCtx *attr_ctx, ProtoEncodingInfo *encoding_info,
-    absl::flat_hash_set<std::string> &group_name_set) {
+    DecoderAttributeCtx* attr_ctx, ProtoEncodingInfo* encoding_info,
+    absl::flat_hash_set<std::string>& group_name_set) {
   if (attr_ctx == nullptr) return;
   std::string group_name = attr_ctx->group_name()->IDENT()->getText();
 
@@ -1072,7 +1072,7 @@
   }
 
   auto map_iter = encoding_info->instruction_group_map().find(group_name);
-  ProtoInstructionGroup *inst_group = nullptr;
+  ProtoInstructionGroup* inst_group = nullptr;
 
   // Check if the group has been visited before. If so, no need to visit.
   if (map_iter != encoding_info->instruction_group_map().end()) {
@@ -1097,8 +1097,8 @@
 }
 
 void ProtoFormatVisitor::ProcessParentGroup(
-    DecoderAttributeCtx *attr_ctx, ProtoEncodingInfo *encoding_info,
-    absl::flat_hash_set<std::string> &group_name_set) {
+    DecoderAttributeCtx* attr_ctx, ProtoEncodingInfo* encoding_info,
+    absl::flat_hash_set<std::string>& group_name_set) {
   if (attr_ctx == nullptr) return;
   // Check each of the child groups. Visit any that hasn't been visited
   // yet, and make sure all use the same encoding proto message.
@@ -1110,10 +1110,10 @@
                                       "' listed twice - ignored"));
     return;
   }
-  std::vector<ProtoInstructionGroup *> child_groups;
+  std::vector<ProtoInstructionGroup*> child_groups;
   std::string group_format_name;
   // Iterate through the list of named "child" groups to combine.
-  for (auto *ident : attr_ctx->group_name()->ident_list()->IDENT()) {
+  for (auto* ident : attr_ctx->group_name()->ident_list()->IDENT()) {
     auto child_name = ident->getText();
     // Make sure the child group hasn't been listed already.
     if (group_name_set.contains(child_name)) {
@@ -1122,14 +1122,14 @@
                                         child_name, "' - ignored"));
       return;
     }
-    ProtoInstructionGroup *child_group = nullptr;
+    ProtoInstructionGroup* child_group = nullptr;
     auto map_iter = encoding_info->instruction_group_map().find(child_name);
     if (map_iter != encoding_info->instruction_group_map().end()) {
       // The instruction group has been visited already. Make sure it
       // hasn't bin listed twice in the list of child groups.
       child_group = map_iter->second;
       bool exists = false;
-      for (auto const *group : child_groups) {
+      for (auto const* group : child_groups) {
         if (child_name == group->name()) {
           exists = true;
           break;
@@ -1140,7 +1140,7 @@
             attr_ctx->start,
             absl::StrCat("Instruction group '", child_name, "' listed twice"));
         // Clean up.
-        for (auto *child_group : child_groups) delete child_group;
+        for (auto* child_group : child_groups) delete child_group;
         return;
       }
     } else {
@@ -1155,7 +1155,7 @@
             attr_ctx->start,
             absl::StrCat("Instruction group '", child_name, "' not found"));
         // Clean up.
-        for (auto *child_group : child_groups) delete child_group;
+        for (auto* child_group : child_groups) delete child_group;
         continue;
       }
     }
@@ -1172,7 +1172,7 @@
                        group_format_name, ", to be merged into group '",
                        group_name, "'"));
       // Clean up.
-      for (auto *child_group : child_groups) delete child_group;
+      for (auto* child_group : child_groups) delete child_group;
       return;
     }
     child_groups.push_back(child_group);
@@ -1181,11 +1181,11 @@
   if (child_groups.empty()) {
     error_listener_->semanticError(attr_ctx->start, "No child groups");
     // Clean up.
-    for (auto *child_group : child_groups) delete child_group;
+    for (auto* child_group : child_groups) delete child_group;
     return;
   }
   // Create the "parent" instruction group.
-  const google::protobuf::Descriptor *group_format =
+  const google::protobuf::Descriptor* group_format =
       message_finder_(Expand(group_format_name));
   if (group_format == nullptr) {
     error_listener_->semanticError(
@@ -1193,20 +1193,20 @@
         absl::StrCat("Could not find proto message type '", group_format_name,
                      "' in proto descriptor pool"));
     // Clean up.
-    for (auto *child_group : child_groups) delete child_group;
+    for (auto* child_group : child_groups) delete child_group;
     return;
   }
   auto res = encoding_info->AddInstructionGroup(group_name, group_format);
   if (!res.ok()) {
     error_listener_->semanticError(attr_ctx->start, res.status().message());
     // Clean up.
-    for (auto *child_group : child_groups) delete child_group;
+    for (auto* child_group : child_groups) delete child_group;
     return;
   }
   auto parent_group = res.value();
   // For each child group, add all of it's encodings to the parent group.
-  for (auto *child_group : child_groups) {
-    for (auto *encoding : child_group->encodings()) {
+  for (auto* child_group : child_groups) {
+    for (auto* encoding : child_group->encodings()) {
       parent_group->CopyInstructionEncoding(
           new ProtoInstructionEncoding(*encoding));
     }
@@ -1217,7 +1217,7 @@
   encoding_info->decoder()->AddInstructionGroup(parent_group);
 }
 
-StringPair ProtoFormatVisitor::EmitCode(ProtoEncodingInfo *encoding_info) {
+StringPair ProtoFormatVisitor::EmitCode(ProtoEncodingInfo* encoding_info) {
   return encoding_info->GenerateDecoderClass();
 }
 
diff --git a/mpact/sim/decoder/proto_format_visitor.h b/mpact/sim/decoder/proto_format_visitor.h
index c8d5d1d..c57730d 100644
--- a/mpact/sim/decoder/proto_format_visitor.h
+++ b/mpact/sim/decoder/proto_format_visitor.h
@@ -71,15 +71,15 @@
   //   proto_dirs: vector of directories from which to resolve proto files.
   //   proto_files: vector of .proto files to import.
   //   directory: target directory to generate the C++ files in.
-  absl::Status Process(const std::vector<std::string> &file_names,
-                       const std::string &decoder_name, std::string_view prefix,
-                       const std::vector<std::string> &include_roots,
-                       const std::vector<std::string> &proto_dirs,
-                       const std::vector<std::string> &proto_files,
+  absl::Status Process(const std::vector<std::string>& file_names,
+                       const std::string& decoder_name, std::string_view prefix,
+                       const std::vector<std::string>& include_roots,
+                       const std::vector<std::string>& proto_dirs,
+                       const std::vector<std::string>& proto_files,
                        std::string_view directory);
 
   // Accessors for the error listener.
-  decoder::DecoderErrorListener *error_listener() const {
+  decoder::DecoderErrorListener* error_listener() const {
     return error_listener_.get();
   }
   void set_error_listener(
@@ -101,94 +101,92 @@
   // Get the field descriptor for the named field from the message type while
   // building up a vector of one_of_fields that are on the path from the top
   // level message to the field.
-  const google::protobuf::FieldDescriptor *GetField(
-      const std::string &field_name,
-      const google::protobuf::Descriptor *message_type,
-      std::vector<const google::protobuf::FieldDescriptor *> &one_of_fields)
+  const google::protobuf::FieldDescriptor* GetField(
+      const std::string& field_name,
+      const google::protobuf::Descriptor* message_type,
+      std::vector<const google::protobuf::FieldDescriptor*>& one_of_fields)
       const;
   // Get the descriptor for the named enumeration member.
-  const google::protobuf::EnumValueDescriptor *GetEnumValueDescriptor(
-      const std::string &full_name) const;
+  const google::protobuf::EnumValueDescriptor* GetEnumValueDescriptor(
+      const std::string& full_name) const;
   // Get the numeric value of the named enumeration member.
-  absl::StatusOr<int> GetEnumValue(const std::string &enum_name) const;
+  absl::StatusOr<int> GetEnumValue(const std::string& enum_name) const;
   // Helpful template function used to find a descriptor by name.
   template <typename T>
-  const T *FindByName(
-      const std::string &message_name, const std::string &name,
-      std::function<const T *(const std::string &)> finder) const;
+  const T* FindByName(const std::string& message_name, const std::string& name,
+                      std::function<const T*(const std::string&)> finder) const;
   // Visit the parse tree to catalog the different declarations.
-  void PreProcessDeclarations(
-      const std::vector<DeclarationCtx *> &declarations);
+  void PreProcessDeclarations(const std::vector<DeclarationCtx*>& declarations);
   // Process an include file declaration.
-  void VisitIncludeFile(IncludeFileCtx *ctx);
+  void VisitIncludeFile(IncludeFileCtx* ctx);
   // Parse an included file.
-  void ParseIncludeFile(antlr4::ParserRuleContext *ctx,
-                        const std::string &file_name,
-                        const std::vector<std::string> &dirs);
+  void ParseIncludeFile(antlr4::ParserRuleContext* ctx,
+                        const std::string& file_name,
+                        const std::vector<std::string>& dirs);
   // Creates the top level data structures and visits the declarations that
   // are necessary to generate the instruction decoder.
   std::unique_ptr<ProtoEncodingInfo> ProcessTopLevel(
-      const std::string &decoder_name);
+      const std::string& decoder_name);
   // The following methods visit specific nodes in the parse tree.
-  ProtoInstructionGroup *VisitInstructionGroupDef(
-      InstructionGroupDefCtx *ctx, ProtoEncodingInfo *encoding_info);
-  void VisitInstructionDef(InstructionDefCtx *ctx,
-                           ProtoInstructionGroup *inst_group,
-                           ProtoEncodingInfo *encoding_info);
-  void VisitFieldConstraint(FieldConstraintCtx *ctx,
-                            ProtoInstructionEncoding *inst_encoding,
-                            const ProtoInstructionGroup *inst_group);
-  ProtoConstraintExpression *VisitConstraintExpression(
-      ConstraintExprCtx *ctx,
-      const google::protobuf::FieldDescriptor *field_desc,
-      const ProtoInstructionGroup *inst_group);
-  ProtoConstraintExpression *VisitValue(ValueCtx *ctx);
-  ProtoConstraintExpression *VisitNumber(NumberCtx *ctx);
-  ProtoConstraintExpression *VisitQualifiedIdent(
-      QualifiedIdentCtx *ctx,
-      const google::protobuf::FieldDescriptor *field_desc,
-      const ProtoInstructionGroup *inst_group);
-  void VisitSetterGroupDef(SetterGroupDefCtx *ctx,
-                           ProtoInstructionGroup *inst_group,
-                           ProtoEncodingInfo *encoding_info);
-  void VisitSetterDef(SetterDefCtx *ctx,
-                      ProtoInstructionEncoding *inst_encoding,
-                      ProtoInstructionGroup *inst_group,
-                      ProtoEncodingInfo *encoding_info);
-  void VisitSetterRef(SetterRefCtx *ctx,
-                      ProtoInstructionEncoding *inst_encoding,
-                      ProtoInstructionGroup *inst_group,
-                      ProtoEncodingInfo *encoding_info);
-  std::unique_ptr<ProtoEncodingInfo> VisitDecoderDef(DecoderDefCtx *ctx);
+  ProtoInstructionGroup* VisitInstructionGroupDef(
+      InstructionGroupDefCtx* ctx, ProtoEncodingInfo* encoding_info);
+  void VisitInstructionDef(InstructionDefCtx* ctx,
+                           ProtoInstructionGroup* inst_group,
+                           ProtoEncodingInfo* encoding_info);
+  void VisitFieldConstraint(FieldConstraintCtx* ctx,
+                            ProtoInstructionEncoding* inst_encoding,
+                            const ProtoInstructionGroup* inst_group);
+  ProtoConstraintExpression* VisitConstraintExpression(
+      ConstraintExprCtx* ctx,
+      const google::protobuf::FieldDescriptor* field_desc,
+      const ProtoInstructionGroup* inst_group);
+  ProtoConstraintExpression* VisitValue(ValueCtx* ctx);
+  ProtoConstraintExpression* VisitNumber(NumberCtx* ctx);
+  ProtoConstraintExpression* VisitQualifiedIdent(
+      QualifiedIdentCtx* ctx,
+      const google::protobuf::FieldDescriptor* field_desc,
+      const ProtoInstructionGroup* inst_group);
+  void VisitSetterGroupDef(SetterGroupDefCtx* ctx,
+                           ProtoInstructionGroup* inst_group,
+                           ProtoEncodingInfo* encoding_info);
+  void VisitSetterDef(SetterDefCtx* ctx,
+                      ProtoInstructionEncoding* inst_encoding,
+                      ProtoInstructionGroup* inst_group,
+                      ProtoEncodingInfo* encoding_info);
+  void VisitSetterRef(SetterRefCtx* ctx,
+                      ProtoInstructionEncoding* inst_encoding,
+                      ProtoInstructionGroup* inst_group,
+                      ProtoEncodingInfo* encoding_info);
+  std::unique_ptr<ProtoEncodingInfo> VisitDecoderDef(DecoderDefCtx* ctx);
   // Process and generate instruction definitions from a generate statement.
-  void ProcessInstructionDefGenerator(InstructionDefCtx *ctx,
-                                      ProtoInstructionGroup *inst_group,
-                                      ProtoEncodingInfo *encoding_info);
+  void ProcessInstructionDefGenerator(InstructionDefCtx* ctx,
+                                      ProtoInstructionGroup* inst_group,
+                                      ProtoEncodingInfo* encoding_info);
   std::string GenerateInstructionDefList(
-      const std::vector<RangeAssignmentInfo *> &range_info_vec, int index,
-      const std::string &template_str_in) const;
+      const std::vector<RangeAssignmentInfo*>& range_info_vec, int index,
+      const std::string& template_str_in) const;
   // Process instruction groups.
-  void ProcessSingleGroup(DecoderAttributeCtx *attr_ctx,
-                          ProtoEncodingInfo *encoding_info,
-                          absl::flat_hash_set<std::string> &group_name_set);
-  void ProcessParentGroup(DecoderAttributeCtx *attr_ctx,
-                          ProtoEncodingInfo *encoding_info,
-                          absl::flat_hash_set<std::string> &group_name_set);
+  void ProcessSingleGroup(DecoderAttributeCtx* attr_ctx,
+                          ProtoEncodingInfo* encoding_info,
+                          absl::flat_hash_set<std::string>& group_name_set);
+  void ProcessParentGroup(DecoderAttributeCtx* attr_ctx,
+                          ProtoEncodingInfo* encoding_info,
+                          absl::flat_hash_set<std::string>& group_name_set);
 
   // Called to generate and emit code for the decoder according to the parsed
   // input file.
-  StringPair EmitCode(ProtoEncodingInfo *encoding_info);
+  StringPair EmitCode(ProtoEncodingInfo* encoding_info);
 
   // Finders used to find specific object types from the proto2 pool.
-  using FieldFinder = std::function<const google::protobuf::FieldDescriptor *(
-      const std::string &)>;
+  using FieldFinder = std::function<const google::protobuf::FieldDescriptor*(
+      const std::string&)>;
   using MessageFinder =
-      std::function<const google::protobuf::Descriptor *(const std::string &)>;
-  using EnumTypeFinder = std::function<const google::protobuf::EnumDescriptor *(
-      const std::string &)>;
+      std::function<const google::protobuf::Descriptor*(const std::string&)>;
+  using EnumTypeFinder = std::function<const google::protobuf::EnumDescriptor*(
+      const std::string&)>;
   using EnumValueFinder =
-      std::function<const google::protobuf::EnumValueDescriptor *(
-          const std::string &)>;
+      std::function<const google::protobuf::EnumValueDescriptor*(
+          const std::string&)>;
 
   FieldFinder field_finder_;
   MessageFinder message_finder_;
@@ -203,16 +201,16 @@
   std::unique_ptr<decoder::DecoderErrorListener> error_listener_ = nullptr;
   std::string decoder_name_;
   // Descriptor pool.
-  const google::protobuf::DescriptorPool *descriptor_pool_;
-  absl::flat_hash_map<std::string, const google::protobuf::FileDescriptor *>
+  const google::protobuf::DescriptorPool* descriptor_pool_;
+  absl::flat_hash_map<std::string, const google::protobuf::FileDescriptor*>
       file_descriptor_map_;
   // Using decl map.
   absl::flat_hash_map<std::string, std::string> using_decl_map_;
   // Maps from identifiers to declaration contexts.
-  absl::flat_hash_map<std::string, InstructionGroupDefCtx *> group_decl_map_;
-  absl::flat_hash_map<std::string, DecoderDefCtx *> decoder_decl_map_;
+  absl::flat_hash_map<std::string, InstructionGroupDefCtx*> group_decl_map_;
+  absl::flat_hash_map<std::string, DecoderDefCtx*> decoder_decl_map_;
   // AntlrParserWrapper vector.
-  std::vector<ProtoFmtAntlrParserWrapper *> antlr_parser_wrappers_;
+  std::vector<ProtoFmtAntlrParserWrapper*> antlr_parser_wrappers_;
 };
 
 }  // namespace proto_fmt
diff --git a/mpact/sim/decoder/proto_instruction_decoder.cc b/mpact/sim/decoder/proto_instruction_decoder.cc
index 59fba2d..945d617 100644
--- a/mpact/sim/decoder/proto_instruction_decoder.cc
+++ b/mpact/sim/decoder/proto_instruction_decoder.cc
@@ -24,19 +24,19 @@
 namespace proto_fmt {
 
 ProtoInstructionDecoder::ProtoInstructionDecoder(
-    std::string name, ProtoEncodingInfo *encoding_info,
-    DecoderErrorListener *error_listener)
+    std::string name, ProtoEncodingInfo* encoding_info,
+    DecoderErrorListener* error_listener)
     : name_(name),
       encoding_info_(encoding_info),
       error_listener_(error_listener) {}
 
 ProtoInstructionDecoder::~ProtoInstructionDecoder() {
-  for (auto *group : instruction_groups_) delete group;
+  for (auto* group : instruction_groups_) delete group;
   instruction_groups_.clear();
 }
 
 void ProtoInstructionDecoder::AddInstructionGroup(
-    ProtoInstructionGroup *inst_group) {
+    ProtoInstructionGroup* inst_group) {
   instruction_groups_.push_back(inst_group);
 }
 
diff --git a/mpact/sim/decoder/proto_instruction_decoder.h b/mpact/sim/decoder/proto_instruction_decoder.h
index 28ed1c8..900e366 100644
--- a/mpact/sim/decoder/proto_instruction_decoder.h
+++ b/mpact/sim/decoder/proto_instruction_decoder.h
@@ -36,33 +36,33 @@
 
 class ProtoInstructionDecoder {
  public:
-  ProtoInstructionDecoder(std::string name, ProtoEncodingInfo *encoding_info,
-                          DecoderErrorListener *error_listener);
+  ProtoInstructionDecoder(std::string name, ProtoEncodingInfo* encoding_info,
+                          DecoderErrorListener* error_listener);
   ~ProtoInstructionDecoder();
 
   // Add an instruction group that will be part of this decoder.
-  void AddInstructionGroup(ProtoInstructionGroup *inst_group);
+  void AddInstructionGroup(ProtoInstructionGroup* inst_group);
 
   // Getters/Setters.
-  const std::string &name() const { return name_; }
-  DecoderErrorListener *error_listener() const { return error_listener_; }
-  ProtoEncodingInfo *encoding_info() const { return encoding_info_; }
-  std::vector<ProtoInstructionGroup *> instruction_groups() const {
+  const std::string& name() const { return name_; }
+  DecoderErrorListener* error_listener() const { return error_listener_; }
+  ProtoEncodingInfo* encoding_info() const { return encoding_info_; }
+  std::vector<ProtoInstructionGroup*> instruction_groups() const {
     return instruction_groups_;
   }
-  std::deque<std::string> &namespaces() { return namespaces_; }
+  std::deque<std::string>& namespaces() { return namespaces_; }
 
  private:
   // Decoder name.
   std::string name_;
   // The global encoding structure.
-  ProtoEncodingInfo *encoding_info_;
+  ProtoEncodingInfo* encoding_info_;
   // Error handler.
-  DecoderErrorListener *error_listener_;
+  DecoderErrorListener* error_listener_;
   // Namespace container.
   std::deque<std::string> namespaces_;
   // Instruction groups.
-  std::vector<ProtoInstructionGroup *> instruction_groups_;
+  std::vector<ProtoInstructionGroup*> instruction_groups_;
 };
 
 }  // namespace proto_fmt
diff --git a/mpact/sim/decoder/proto_instruction_encoding.cc b/mpact/sim/decoder/proto_instruction_encoding.cc
index 5b725b9..bbd16b2 100644
--- a/mpact/sim/decoder/proto_instruction_encoding.cc
+++ b/mpact/sim/decoder/proto_instruction_encoding.cc
@@ -38,55 +38,55 @@
 using mpact::sim::machine_description::instruction_set::ToPascalCase;
 
 ProtoInstructionEncoding::ProtoInstructionEncoding(
-    std::string name, ProtoInstructionGroup *parent)
+    std::string name, ProtoInstructionGroup* parent)
     : name_(name), instruction_group_(parent) {}
 
 // Copy constructor.
 ProtoInstructionEncoding::ProtoInstructionEncoding(
-    const ProtoInstructionEncoding &rhs) {
+    const ProtoInstructionEncoding& rhs) {
   name_ = rhs.name_;
   instruction_group_ = rhs.instruction_group_;
   setter_code_ = rhs.setter_code_;
-  for (const auto &[name, setter_ptr] : rhs.setter_map_) {
+  for (const auto& [name, setter_ptr] : rhs.setter_map_) {
     setter_map_.insert({name, new ProtoSetter(*setter_ptr)});
   }
-  for (const auto *constraint : rhs.equal_constraints_) {
+  for (const auto* constraint : rhs.equal_constraints_) {
     equal_constraints_.push_back(new ProtoConstraint(*constraint));
   }
-  for (const auto *constraint : rhs.other_constraints_) {
+  for (const auto* constraint : rhs.other_constraints_) {
     other_constraints_.push_back(new ProtoConstraint(*constraint));
   }
-  for (const auto &[name, constraint_ptr] : rhs.has_constraints_) {
+  for (const auto& [name, constraint_ptr] : rhs.has_constraints_) {
     has_constraints_.insert({name, new ProtoConstraint(*constraint_ptr)});
   }
 }
 
 ProtoInstructionEncoding::~ProtoInstructionEncoding() {
-  for (const auto *constraint : equal_constraints_) {
+  for (const auto* constraint : equal_constraints_) {
     delete constraint->expr;
     delete constraint;
   }
   equal_constraints_.clear();
-  for (const auto *constraint : other_constraints_) {
+  for (const auto* constraint : other_constraints_) {
     delete constraint->expr;
     delete constraint;
   }
   other_constraints_.clear();
-  for (const auto &[unused, constraint] : has_constraints_) {
+  for (const auto& [unused, constraint] : has_constraints_) {
     delete constraint;
   }
   has_constraints_.clear();
-  for (const auto &[unused, setter] : setter_map_) {
+  for (const auto& [unused, setter] : setter_map_) {
     delete setter;
   }
   setter_map_.clear();
 }
 
 absl::Status ProtoInstructionEncoding::AddSetter(
-    SetterDefCtx *ctx, const std::string &name,
-    const google::protobuf::FieldDescriptor *field_descriptor,
-    const std::vector<const google::protobuf::FieldDescriptor *> &one_of_fields,
-    IfNotCtx *if_not) {
+    SetterDefCtx* ctx, const std::string& name,
+    const google::protobuf::FieldDescriptor* field_descriptor,
+    const std::vector<const google::protobuf::FieldDescriptor*>& one_of_fields,
+    IfNotCtx* if_not) {
   if (ctx == nullptr) return absl::InvalidArgumentError("Context is null");
 
   // If there is a setter already for that name, return an error.
@@ -100,8 +100,8 @@
   // one_of_fields vector, as it is guaranteed to be satisfied if the
   // instruction is successfully decoded. If it contradicts an existing
   // constraint, signal an error.
-  ProtoConstraint *depends_on = nullptr;
-  for (auto const *desc : one_of_fields) {
+  ProtoConstraint* depends_on = nullptr;
+  for (auto const* desc : one_of_fields) {
     auto iter = oneof_field_map_.find(desc->containing_oneof());
     if (iter != oneof_field_map_.end()) {
       // Duplicate of an encoding constraint.
@@ -121,16 +121,16 @@
 }
 
 absl::Status ProtoInstructionEncoding::AddConstraint(
-    FieldConstraintCtx *ctx, ConstraintType op,
-    const google::protobuf::FieldDescriptor *field_descriptor,
-    const std::vector<const google::protobuf::FieldDescriptor *> &one_of_fields,
-    const ProtoConstraintExpression *expr) {
+    FieldConstraintCtx* ctx, ConstraintType op,
+    const google::protobuf::FieldDescriptor* field_descriptor,
+    const std::vector<const google::protobuf::FieldDescriptor*>& one_of_fields,
+    const ProtoConstraintExpression* expr) {
   // One_of_fields is a list of fields that have 'kHas' constraints that are
   // prerequisites for the constraint being added. The variable depends_on
   // points to the end of the dependence chain, or nullptr if there are no or
   // duplicate one_of field constraints.
-  ProtoConstraint *depends_on = nullptr;
-  for (auto const *desc : one_of_fields) {
+  ProtoConstraint* depends_on = nullptr;
+  for (auto const* desc : one_of_fields) {
     auto iter = oneof_field_map_.find(desc->containing_oneof());
     if (iter != oneof_field_map_.end()) {
       if (iter->second == field_descriptor) {
@@ -186,7 +186,7 @@
              (field_descriptor->containing_oneof() != nullptr)) {
     // If it's a kHas constraint on an one_of field, first make sure that it
     // does not contradict or duplicate any previous one_of kHas constraints.
-    auto *oneof_desc = field_descriptor->containing_oneof();
+    auto* oneof_desc = field_descriptor->containing_oneof();
     auto iter = oneof_field_map_.find(oneof_desc);
     if (iter != oneof_field_map_.end()) {
       // There is already a constraint on this oneof. Either it's the same
@@ -214,9 +214,9 @@
   return absl::OkStatus();
 }
 
-ProtoConstraint *ProtoInstructionEncoding::AddHasConstraint(
-    const google::protobuf::FieldDescriptor *field_descriptor,
-    ProtoConstraint *depends_on) {
+ProtoConstraint* ProtoInstructionEncoding::AddHasConstraint(
+    const google::protobuf::FieldDescriptor* field_descriptor,
+    ProtoConstraint* depends_on) {
   if (depends_on != nullptr) {
     if (!has_constraints_.contains(depends_on->field_descriptor->full_name())) {
       return nullptr;
@@ -225,7 +225,7 @@
   auto iter = has_constraints_.find(field_descriptor->full_name());
   if (iter != has_constraints_.end()) return iter->second;
 
-  ProtoConstraint *constraint = new ProtoConstraint{
+  ProtoConstraint* constraint = new ProtoConstraint{
       nullptr, field_descriptor, ConstraintType::kHas, nullptr, 0, depends_on};
   has_constraints_.emplace(field_descriptor->full_name(), constraint);
   return constraint;
@@ -241,28 +241,28 @@
   // with if_not and those without (except for those with no depends_on.).
   // Also need to group constraints by their dependencies. Use multimap that
   // maps from a constraint to those that depend on it.
-  absl::btree_multimap<const ProtoConstraint *, const ProtoConstraint *>
+  absl::btree_multimap<const ProtoConstraint*, const ProtoConstraint*>
       grouped_constraints;
   // Maintain a set of inserted constraints, so that the multimap has no
   // duplicate key-value pairs.
-  absl::flat_hash_set<const ProtoConstraint *> inserted_constraints;
+  absl::flat_hash_set<const ProtoConstraint*> inserted_constraints;
   // This set contains the top level constraints that do not depend on any
   // other constraints, and thus are the beginning of the 'dependence chains'.
-  absl::flat_hash_set<const ProtoConstraint *> constraint_tops;
+  absl::flat_hash_set<const ProtoConstraint*> constraint_tops;
   // These multimaps map from a constraint to the set of setters dependent on
   // that constraint.
-  absl::btree_multimap<const ProtoConstraint *, const ProtoSetter *>
+  absl::btree_multimap<const ProtoConstraint*, const ProtoSetter*>
       grouped_setters;
-  absl::btree_multimap<const ProtoConstraint *, const ProtoSetter *>
+  absl::btree_multimap<const ProtoConstraint*, const ProtoSetter*>
       grouped_if_not_setters;
 
   // Lambda used to determine if a constraint is already satisfied by
   // an identical constraint used in the decoding of the instruction.
-  auto is_in_eq_constraints = [&](const ProtoConstraint *constraint) {
-    auto *field_descriptor = constraint->field_descriptor;
+  auto is_in_eq_constraints = [&](const ProtoConstraint* constraint) {
+    auto* field_descriptor = constraint->field_descriptor;
     auto iter = std::find_if(
         equal_constraints_.begin(), equal_constraints_.end(),
-        [&field_descriptor](const ProtoConstraint *constraint) {
+        [&field_descriptor](const ProtoConstraint* constraint) {
           return (constraint->op == ConstraintType::kHas) &&
                  (constraint->field_descriptor == field_descriptor);
         });
@@ -271,9 +271,9 @@
 
   // First build up the data structures.
   // Iterate over the setters for this instruction.
-  for (auto &[name, setter_ptr] : setter_map_) {
+  for (auto& [name, setter_ptr] : setter_map_) {
     // Get any one_of dependency that the setter depends on.
-    auto *depends = setter_ptr->depends_on;
+    auto* depends = setter_ptr->depends_on;
     // If the dependency matches one in the equal constraints for decoding the
     // instruction, it will be true for the setters, and does not have to be
     // tested for again.
@@ -313,7 +313,7 @@
 
   // Helper lambda functions used in the loop nest below.
   // This generates the assignment.
-  auto assign = [&](int indent, const ProtoSetter *setter) {
+  auto assign = [&](int indent, const ProtoSetter* setter) {
     absl::StrAppend(&setter_code_, std::string(indent, ' '), "decoder->Set",
                     ToPascalCase(setter->name), "($.");
     auto field_name = setter->ctx->qualified_ident()->getText();
@@ -346,9 +346,9 @@
   // Helper lambda function to generate the if statement to guard individual
   // setters.
   auto generate_if_statement = [&](int indent,
-                                   const ProtoConstraint *constraint) {
-    auto *desc = constraint->field_descriptor;
-    auto *oneof = desc->containing_oneof();
+                                   const ProtoConstraint* constraint) {
+    auto* desc = constraint->field_descriptor;
+    auto* oneof = desc->containing_oneof();
     absl::StrAppend(&setter_code_, std::string(indent, ' '), "if ($.");
     if (oneof != nullptr) {
       absl::StrAppend(&setter_code_, oneof->name(),
@@ -361,8 +361,8 @@
 
   // Recursive lambda for generating nested if statements around groups of
   // setters with the same constraint.
-  std::function<void(int, const ProtoConstraint *)> generate_nested_ifs =
-      [&](int indent, const ProtoConstraint *constraint) {
+  std::function<void(int, const ProtoConstraint*)> generate_nested_ifs =
+      [&](int indent, const ProtoConstraint* constraint) {
         // Generate if statement for 'constraint'.
         generate_if_statement(indent, constraint);
         indent += 2;
@@ -384,24 +384,24 @@
       };
 
   // Process the setters with no if_not's.
-  for (auto *constraint : constraint_tops) {
+  for (auto* constraint : constraint_tops) {
     generate_nested_ifs(kIndent, constraint);
   }
 
   // Recursive lambda for generating the conditions of the if statements used
   // by setters with 'if_not' constructs.
-  std::function<void(const ProtoConstraint *, std::string &)>
+  std::function<void(const ProtoConstraint*, std::string&)>
       recursive_if_conditions =
-          [&](const ProtoConstraint *constraint, std::string &if_conditions) {
-            auto *desc = constraint->field_descriptor;
-            auto *depends_on = constraint->depends_on;
+          [&](const ProtoConstraint* constraint, std::string& if_conditions) {
+            auto* desc = constraint->field_descriptor;
+            auto* depends_on = constraint->depends_on;
             std::string sep = "";
             // Generate the conditions in reverse order of the depends_on list.
             if (depends_on != nullptr) {
               recursive_if_conditions(depends_on, if_conditions);
               if (!if_conditions.empty()) sep = " && ";
             }
-            auto *oneof = desc->containing_oneof();
+            auto* oneof = desc->containing_oneof();
             std::string ident = constraint->ctx->qualified_ident()->getText();
             auto pos = ident.find_last_of('.');
             std::string prefix;
diff --git a/mpact/sim/decoder/proto_instruction_encoding.h b/mpact/sim/decoder/proto_instruction_encoding.h
index 1349d05..2a96456 100644
--- a/mpact/sim/decoder/proto_instruction_encoding.h
+++ b/mpact/sim/decoder/proto_instruction_encoding.h
@@ -60,36 +60,36 @@
 // Struct to store information about an encoding constraint for an instruction.
 struct ProtoConstraint {
   // Parsing context.
-  FieldConstraintCtx *ctx;
+  FieldConstraintCtx* ctx;
   // The proto field descriptor for which the constraint applies.
-  const google::protobuf::FieldDescriptor *field_descriptor;
+  const google::protobuf::FieldDescriptor* field_descriptor;
   // The constraint type.
   ConstraintType op;
   // If non-null, the expression that applies to the constraint.
-  const ProtoConstraintExpression *expr;
+  const ProtoConstraintExpression* expr;
   // If the value is compatible with int64_t, the value of the expression. This
   // is filled in later when the expression is evaluated for decoding purposes.
   int64_t value;
   // If non-null, points to a constraint that has to be true before one can
   // evaluate this constraint.
-  ProtoConstraint *depends_on;
+  ProtoConstraint* depends_on;
   // Constructors.
-  ProtoConstraint(FieldConstraintCtx *ctx,
-                  const google::protobuf::FieldDescriptor *field_descriptor,
-                  ConstraintType op, const ProtoConstraintExpression *expr,
-                  int64_t value, ProtoConstraint *depends_on)
+  ProtoConstraint(FieldConstraintCtx* ctx,
+                  const google::protobuf::FieldDescriptor* field_descriptor,
+                  ConstraintType op, const ProtoConstraintExpression* expr,
+                  int64_t value, ProtoConstraint* depends_on)
       : ctx(ctx),
         field_descriptor(field_descriptor),
         op(op),
         expr(expr),
         value(value),
         depends_on(depends_on) {}
-  ProtoConstraint(FieldConstraintCtx *ctx,
-                  const google::protobuf::FieldDescriptor *field_descriptor,
+  ProtoConstraint(FieldConstraintCtx* ctx,
+                  const google::protobuf::FieldDescriptor* field_descriptor,
                   ConstraintType op)
       : ProtoConstraint(ctx, field_descriptor, op, nullptr, 0, nullptr) {}
   // Copy constructor.
-  ProtoConstraint(const ProtoConstraint &rhs) {
+  ProtoConstraint(const ProtoConstraint& rhs) {
     this->ctx = rhs.ctx;
     this->field_descriptor = rhs.field_descriptor;
     this->op = rhs.op;
@@ -102,16 +102,16 @@
 // Struct to store information about a setter for an instruction encoding.
 struct ProtoSetter {
   // Proto setter context.
-  SetterDefCtx *ctx;
+  SetterDefCtx* ctx;
   // The name of the object that is set.
   std::string name;
   // The field that will provide the type and value of the object.
-  const google::protobuf::FieldDescriptor *field_descriptor;
+  const google::protobuf::FieldDescriptor* field_descriptor;
   // Default value of the object if the field descriptor is not valid.
-  IfNotCtx *if_not;
+  IfNotCtx* if_not;
   // If non-null, points to constraint that has to be true in order to access
   // the value of the field described by field_descriptor.
-  ProtoConstraint *depends_on;
+  ProtoConstraint* depends_on;
 };
 
 class ProtoInstructionGroup;
@@ -120,11 +120,11 @@
 // instruction in an instruction group.
 class ProtoInstructionEncoding {
  public:
-  ProtoInstructionEncoding(std::string name, ProtoInstructionGroup *parent);
-  ProtoInstructionEncoding(const ProtoInstructionEncoding &rhs);
+  ProtoInstructionEncoding(std::string name, ProtoInstructionGroup* parent);
+  ProtoInstructionEncoding(const ProtoInstructionEncoding& rhs);
   ProtoInstructionEncoding() = delete;
-  ProtoInstructionEncoding &operator=(
-      const ProtoInstructionEncoding &encoding) = delete;
+  ProtoInstructionEncoding& operator=(
+      const ProtoInstructionEncoding& encoding) = delete;
   ~ProtoInstructionEncoding();
 
   // Adds a value setter that is executed when the instruction is successfully
@@ -132,20 +132,20 @@
   // values, etc., that could be stored in a nested one_of submessage, available
   // at known names.
   absl::Status AddSetter(
-      SetterDefCtx *ctx, const std::string &name,
-      const google::protobuf::FieldDescriptor *field_descriptor,
-      const std::vector<const google::protobuf::FieldDescriptor *>
-          &one_of_fields,
-      IfNotCtx *if_not);
+      SetterDefCtx* ctx, const std::string& name,
+      const google::protobuf::FieldDescriptor* field_descriptor,
+      const std::vector<const google::protobuf::FieldDescriptor*>&
+          one_of_fields,
+      IfNotCtx* if_not);
   // Adds an encoding constraint for the current instruction. Encoding
   // constraints provide constraints on values of proto message fields that
   // have to be satisfied in order for the instruction to match.
   absl::Status AddConstraint(
-      FieldConstraintCtx *ctx, ConstraintType op,
-      const google::protobuf::FieldDescriptor *field_descriptor,
-      const std::vector<const google::protobuf::FieldDescriptor *>
-          &one_of_fields,
-      const ProtoConstraintExpression *expr);
+      FieldConstraintCtx* ctx, ConstraintType op,
+      const google::protobuf::FieldDescriptor* field_descriptor,
+      const std::vector<const google::protobuf::FieldDescriptor*>&
+          one_of_fields,
+      const ProtoConstraintExpression* expr);
 
   // Call when the setters and constraints have been added in order to generate
   // the setter code into the setter_code_ variable.
@@ -153,17 +153,17 @@
   // Get setter code, substituting 'message_name' for '$' in the text.
   std::string GetSetterCode(absl::string_view message_name, int indent) const;
   // Getters.
-  const std::string &name() const { return name_; }
-  ProtoInstructionGroup *instruction_group() const {
+  const std::string& name() const { return name_; }
+  ProtoInstructionGroup* instruction_group() const {
     return instruction_group_;
   }
-  std::vector<ProtoConstraint *> &equal_constraints() {
+  std::vector<ProtoConstraint*>& equal_constraints() {
     return equal_constraints_;
   }
-  std::vector<ProtoConstraint *> &other_constraints() {
+  std::vector<ProtoConstraint*>& other_constraints() {
     return other_constraints_;
   }
-  absl::flat_hash_map<std::string, ProtoConstraint *> &has_constraints() {
+  absl::flat_hash_map<std::string, ProtoConstraint*>& has_constraints() {
     return has_constraints_;
   }
 
@@ -176,29 +176,29 @@
   // then it is required that the depends_on constraint exists in the
   // has_constraints_ map. This is checked by searching for the full_name of
   // the field_descriptor in the depends_on constraint.
-  ProtoConstraint *AddHasConstraint(
-      const google::protobuf::FieldDescriptor *field_descriptor,
-      ProtoConstraint *depends_on);
+  ProtoConstraint* AddHasConstraint(
+      const google::protobuf::FieldDescriptor* field_descriptor,
+      ProtoConstraint* depends_on);
 
   // Instruction name.
   std::string name_;
   // Parent instruction group.
-  ProtoInstructionGroup *instruction_group_ = nullptr;
+  ProtoInstructionGroup* instruction_group_ = nullptr;
   // Setter code for this encoding.
   std::string setter_code_;
   // Map from setter names to the setter structs.
-  absl::btree_map<std::string, ProtoSetter *> setter_map_;
+  absl::btree_map<std::string, ProtoSetter*> setter_map_;
   // Map from one_of descriptor to field.
-  absl::flat_hash_map<const google::protobuf::OneofDescriptor *,
-                      const google::protobuf::FieldDescriptor *>
+  absl::flat_hash_map<const google::protobuf::OneofDescriptor*,
+                      const google::protobuf::FieldDescriptor*>
       oneof_field_map_;
   // "equal-to" field constraints.
-  std::vector<ProtoConstraint *> equal_constraints_;
+  std::vector<ProtoConstraint*> equal_constraints_;
   // All other constraints.
-  std::vector<ProtoConstraint *> other_constraints_;
+  std::vector<ProtoConstraint*> other_constraints_;
   // Has Constraints, these are required one_of members that other constraints
   // may depend on.
-  absl::flat_hash_map<std::string, ProtoConstraint *> has_constraints_;
+  absl::flat_hash_map<std::string, ProtoConstraint*> has_constraints_;
 };
 
 }  // namespace proto_fmt
diff --git a/mpact/sim/decoder/proto_instruction_group.cc b/mpact/sim/decoder/proto_instruction_group.cc
index 32d0277..d253d43 100644
--- a/mpact/sim/decoder/proto_instruction_group.cc
+++ b/mpact/sim/decoder/proto_instruction_group.cc
@@ -40,22 +40,22 @@
 using ::mpact::sim::machine_description::instruction_set::ToPascalCase;
 
 ProtoInstructionGroup::ProtoInstructionGroup(
-    std::string group_name, const google::protobuf::Descriptor *message_type,
-    std::string opcode_enum, ProtoEncodingInfo *encoding_info)
+    std::string group_name, const google::protobuf::Descriptor* message_type,
+    std::string opcode_enum, ProtoEncodingInfo* encoding_info)
     : name_(group_name),
       message_type_(message_type),
       opcode_enum_(opcode_enum),
       encoding_info_(encoding_info) {}
 
 ProtoInstructionGroup::~ProtoInstructionGroup() {
-  for (auto *encoding : encodings_) {
+  for (auto* encoding : encodings_) {
     delete encoding;
   }
   encodings_.clear();
   delete encoding_group_;
   encoding_group_ = nullptr;
-  for (auto &[unused, setter_map] : setter_groups_) {
-    for (auto &[unused, setter_info] : setter_map) {
+  for (auto& [unused, setter_map] : setter_groups_) {
+    for (auto& [unused, setter_info] : setter_map) {
       delete setter_info;
     }
     setter_map.clear();
@@ -63,33 +63,33 @@
   setter_groups_.clear();
 }
 
-ProtoInstructionEncoding *ProtoInstructionGroup::AddInstructionEncoding(
+ProtoInstructionEncoding* ProtoInstructionGroup::AddInstructionEncoding(
     std::string name) {
-  auto *encoding = new ProtoInstructionEncoding(name, this);
+  auto* encoding = new ProtoInstructionEncoding(name, this);
   encodings_.push_back(encoding);
   return encoding;
 }
 
 absl::StatusOr<
-    std::pair<absl::btree_map<std::string, SetterInfo *>::const_iterator,
-              absl::btree_map<std::string, SetterInfo *>::const_iterator>>
+    std::pair<absl::btree_map<std::string, SetterInfo*>::const_iterator,
+              absl::btree_map<std::string, SetterInfo*>::const_iterator>>
 ProtoInstructionGroup::GetSetterGroup(absl::string_view group) const {
   auto map_iter = setter_groups_.find(group);
   if (map_iter == setter_groups_.end()) {
     return absl::NotFoundError(absl::StrCat("No setter group '", group, "'."));
   }
-  return std::pair<absl::btree_map<std::string, SetterInfo *>::const_iterator,
-                   absl::btree_map<std::string, SetterInfo *>::const_iterator>{
+  return std::pair<absl::btree_map<std::string, SetterInfo*>::const_iterator,
+                   absl::btree_map<std::string, SetterInfo*>::const_iterator>{
       map_iter->second.begin(), map_iter->second.end()};
 }
 
 // Add a group level setter.
 absl::Status ProtoInstructionGroup::AddSetter(
-    const std::string &group_name, SetterDefCtx *ctx,
-    const std::string &setter_name,
-    const google::protobuf::FieldDescriptor *field_desc,
-    std::vector<const google::protobuf::FieldDescriptor *> one_of_fields,
-    IfNotCtx *if_not) {
+    const std::string& group_name, SetterDefCtx* ctx,
+    const std::string& setter_name,
+    const google::protobuf::FieldDescriptor* field_desc,
+    std::vector<const google::protobuf::FieldDescriptor*> one_of_fields,
+    IfNotCtx* if_not) {
   auto map_iter = setter_groups_.find(group_name);
   if (map_iter == setter_groups_.end()) {
     auto [iter, unused] = setter_groups_.insert({group_name, {}});
@@ -100,14 +100,14 @@
         absl::StrCat("Duplicate setter name '", setter_name,
                      "' in setter group '", group_name, "'."));
   }
-  auto *setter_info =
+  auto* setter_info =
       new SetterInfo({ctx, setter_name, field_desc, one_of_fields, if_not});
   map_iter->second.insert({setter_name, setter_info});
   return absl::OkStatus();
 }
 
 void ProtoInstructionGroup::CopyInstructionEncoding(
-    ProtoInstructionEncoding *encoding) {
+    ProtoInstructionEncoding* encoding) {
   if (encoding_name_set_.contains(encoding->name())) {
     encoding_info_->error_listener()->semanticWarning(
         nullptr, absl::StrCat("Duplicate instruction opcode name '",
@@ -118,11 +118,11 @@
 }
 
 void ProtoInstructionGroup::ProcessEncodings(
-    DecoderErrorListener *error_listener) {
+    DecoderErrorListener* error_listener) {
   // Create a new encoding group for this instruction group and add all the
   // encodings to it.
   encoding_group_ = new ProtoEncodingGroup(this, 0, error_listener);
-  for (auto *encoding : encodings_) {
+  for (auto* encoding : encodings_) {
     encoding_group_->AddEncoding(new ProtoInstructionEncoding(*encoding));
   }
   // Call the encoding group to break it into a proper decoding hierarchy.
diff --git a/mpact/sim/decoder/proto_instruction_group.h b/mpact/sim/decoder/proto_instruction_group.h
index 8440af9..d178553 100644
--- a/mpact/sim/decoder/proto_instruction_group.h
+++ b/mpact/sim/decoder/proto_instruction_group.h
@@ -39,71 +39,71 @@
 class ProtoEncodingGroup;
 
 struct SetterInfo {
-  SetterDefCtx *ctx;
+  SetterDefCtx* ctx;
   std::string name;
-  const google::protobuf::FieldDescriptor *field_desc;
-  std::vector<const google::protobuf::FieldDescriptor *> one_of_fields;
-  IfNotCtx *if_not;
+  const google::protobuf::FieldDescriptor* field_desc;
+  std::vector<const google::protobuf::FieldDescriptor*> one_of_fields;
+  IfNotCtx* if_not;
 };
 
 // This class represents an instruction group from the .proto_fmt file.
 class ProtoInstructionGroup {
  public:
   ProtoInstructionGroup(std::string group_name,
-                        const google::protobuf::Descriptor *message_type,
+                        const google::protobuf::Descriptor* message_type,
                         std::string opcode_enum,
-                        ProtoEncodingInfo *encoding_info);
+                        ProtoEncodingInfo* encoding_info);
   ProtoInstructionGroup() = delete;
   ~ProtoInstructionGroup();
 
   // Add group level setter.
   absl::Status AddSetter(
-      const std::string &group_name, SetterDefCtx *ctx,
-      const std::string &setter_name,
-      const google::protobuf::FieldDescriptor *field_desc,
-      std::vector<const google::protobuf::FieldDescriptor *> one_of_fields,
-      IfNotCtx *if_not);
+      const std::string& group_name, SetterDefCtx* ctx,
+      const std::string& setter_name,
+      const google::protobuf::FieldDescriptor* field_desc,
+      std::vector<const google::protobuf::FieldDescriptor*> one_of_fields,
+      IfNotCtx* if_not);
   // Look up the setters in the named setter group. If found, return the begin
   // and end iterators for those setters.
   absl::StatusOr<
-      std::pair<absl::btree_map<std::string, SetterInfo *>::const_iterator,
-                absl::btree_map<std::string, SetterInfo *>::const_iterator>>
+      std::pair<absl::btree_map<std::string, SetterInfo*>::const_iterator,
+                absl::btree_map<std::string, SetterInfo*>::const_iterator>>
   GetSetterGroup(absl::string_view group) const;
   // Create and return an instruction encoding with the given name.
-  ProtoInstructionEncoding *AddInstructionEncoding(std::string name);
+  ProtoInstructionEncoding* AddInstructionEncoding(std::string name);
   // Create a copy of the given instruction encoding.
-  void CopyInstructionEncoding(ProtoInstructionEncoding *encoding);
+  void CopyInstructionEncoding(ProtoInstructionEncoding* encoding);
   // Create an encoding group for this instruction group and then subdivide
   // it in a hierarchy as necessary.
-  void ProcessEncodings(DecoderErrorListener *error_listener);
+  void ProcessEncodings(DecoderErrorListener* error_listener);
 
   // Generate the decoder for this instruction group.
   std::string GenerateDecoder() const;
 
   // Accessors.
-  const std::string &name() const { return name_; }
-  const google::protobuf::Descriptor *message_type() const {
+  const std::string& name() const { return name_; }
+  const google::protobuf::Descriptor* message_type() const {
     return message_type_;
   }
-  const std::vector<ProtoInstructionEncoding *> &encodings() const {
+  const std::vector<ProtoInstructionEncoding*>& encodings() const {
     return encodings_;
   }
-  const ProtoEncodingInfo *encoding_info() const { return encoding_info_; }
+  const ProtoEncodingInfo* encoding_info() const { return encoding_info_; }
 
  private:
   std::string name_;
-  const google::protobuf::Descriptor *message_type_;
+  const google::protobuf::Descriptor* message_type_;
   std::string opcode_enum_;
-  ProtoEncodingInfo *encoding_info_;
+  ProtoEncodingInfo* encoding_info_;
   absl::flat_hash_set<std::string> encoding_name_set_;
-  std::vector<ProtoInstructionEncoding *> encodings_;
+  std::vector<ProtoInstructionEncoding*> encodings_;
   // Encoding group.
-  ProtoEncodingGroup *encoding_group_ = nullptr;
+  ProtoEncodingGroup* encoding_group_ = nullptr;
   // Setter names and types.
   absl::btree_map<std::string, int> setter_name_to_type_;
   // Setter group map. Maps from setter group name to a map from setter name
   // to setter info.
-  absl::btree_map<std::string, absl::btree_map<std::string, SetterInfo *>>
+  absl::btree_map<std::string, absl::btree_map<std::string, SetterInfo*>>
       setter_groups_;
 };
 
diff --git a/mpact/sim/decoder/resource.cc b/mpact/sim/decoder/resource.cc
index 0cafa1a..77ecea8 100644
--- a/mpact/sim/decoder/resource.cc
+++ b/mpact/sim/decoder/resource.cc
@@ -17,6 +17,10 @@
 #include <string>
 #include <utility>
 
+#include "absl/status/status.h"
+#include "absl/status/statusor.h"
+#include "absl/strings/str_cat.h"
+#include "absl/strings/string_view.h"
 #include "mpact/sim/decoder/format_name.h"
 
 namespace mpact {
@@ -29,24 +33,24 @@
 }
 
 ResourceFactory::~ResourceFactory() {
-  for (auto &[unused, resource_ptr] : resource_map_) {
+  for (auto& [unused, resource_ptr] : resource_map_) {
     delete resource_ptr;
   }
   resource_map_.clear();
 }
 
-absl::StatusOr<Resource *> ResourceFactory::CreateResource(
+absl::StatusOr<Resource*> ResourceFactory::CreateResource(
     absl::string_view name) {
   if (resource_map_.contains(name)) {
     return absl::AlreadyExistsError(
         absl::StrCat("Resource '", name, "' already exists"));
   }
-  auto *resource = new Resource(std::string(name));
+  auto* resource = new Resource(std::string(name));
   resource_map_.insert(std::make_pair(resource->name(), resource));
   return resource;
 }
 
-Resource *ResourceFactory::GetOrInsertResource(absl::string_view name) {
+Resource* ResourceFactory::GetOrInsertResource(absl::string_view name) {
   auto iter = resource_map_.find(name);
   if (iter != resource_map_.end()) return iter->second;
   auto result = CreateResource(name);
diff --git a/mpact/sim/decoder/resource.h b/mpact/sim/decoder/resource.h
index 6567b15..25867e2 100644
--- a/mpact/sim/decoder/resource.h
+++ b/mpact/sim/decoder/resource.h
@@ -50,8 +50,8 @@
   bool is_array() const { return is_array_; }
   void set_is_array(bool value) { is_array_ = value; }
 
-  const std::string &name() const { return name_; }
-  const std::string &pascal_name() const { return pascal_name_; }
+  const std::string& name() const { return name_; }
+  const std::string& pascal_name() const { return pascal_name_; }
 
  private:
   explicit Resource(std::string name);
@@ -66,7 +66,7 @@
 // resources.
 class ResourceFactory {
  public:
-  using ResourceMap = absl::btree_map<std::string, Resource *>;
+  using ResourceMap = absl::btree_map<std::string, Resource*>;
   using ArgumentSet = absl::btree_set<std::string>;
 
   ResourceFactory() = default;
@@ -74,11 +74,11 @@
 
   // If the resource doesn't yet exist, create a new resource and return the
   // pointer, otherwise return an error code.
-  absl::StatusOr<Resource *> CreateResource(absl::string_view name);
+  absl::StatusOr<Resource*> CreateResource(absl::string_view name);
   // Return the named resource, or if it does not exist, create it, and return
   // a pointer to the newly created resource.
-  Resource *GetOrInsertResource(absl::string_view name);
-  const ResourceMap &resource_map() const { return resource_map_; }
+  Resource* GetOrInsertResource(absl::string_view name);
+  const ResourceMap& resource_map() const { return resource_map_; }
 
  private:
   ResourceMap resource_map_;
diff --git a/mpact/sim/decoder/slot.cc b/mpact/sim/decoder/slot.cc
index 641972e..e7cf436 100644
--- a/mpact/sim/decoder/slot.cc
+++ b/mpact/sim/decoder/slot.cc
@@ -60,7 +60,7 @@
 // This function translates the location specification into a set of '->'
 // references starting with 'inst->' to get to the operand that is implied.
 static absl::StatusOr<std::string> TranslateLocator(
-    const OperandLocator &locator) {
+    const OperandLocator& locator) {
   std::string code;
   absl::StrAppend(&code, "inst->");
   if (locator.op_spec_number > 0) {
@@ -85,7 +85,7 @@
 // This is a helper function that generates the code snippet to extract the
 // right sized value based on the length specifier in the print format
 // specification. E.g., %08x, %04d, etc.
-static std::string GetExtractor(const std::string &format) {
+static std::string GetExtractor(const std::string& format) {
   int size = 0;
   int pos = 0;
   int len = 1;
@@ -105,8 +105,8 @@
 
 // Small helper function to just expand the expression specified by the
 // FormatInfo from parsing the disassembly specifier.
-static std::string ExpandExpression(const FormatInfo &format,
-                                    const std::string &locator) {
+static std::string ExpandExpression(const FormatInfo& format,
+                                    const std::string& locator) {
   // Handle the case when it's just an '@' - i.e., just the address.
   if (format.use_address && format.operation.empty()) {
     return absl::StrCat("(inst->address())");
@@ -133,8 +133,8 @@
                           : "))");
 }
 
-Slot::Slot(absl::string_view name, InstructionSet *instruction_set,
-           bool is_templated, SlotDeclCtx *ctx, unsigned generator_version)
+Slot::Slot(absl::string_view name, InstructionSet* instruction_set,
+           bool is_templated, SlotDeclCtx* ctx, unsigned generator_version)
     : instruction_set_(instruction_set),
       ctx_(ctx),
       generator_version_(generator_version),
@@ -147,37 +147,37 @@
   default_latency_ = nullptr;
   delete default_instruction_;
   default_instruction_ = nullptr;
-  for (auto *param : template_parameters_) {
+  for (auto* param : template_parameters_) {
     delete param;
   }
   template_parameters_.clear();
-  for (auto &base : base_slots_) {
+  for (auto& base : base_slots_) {
     if (base.arguments != nullptr) {
-      for (auto *expr : *(base.arguments)) {
+      for (auto* expr : *(base.arguments)) {
         delete expr;
       }
       delete base.arguments;
     }
   }
   base_slots_.clear();
-  for (auto &[unused, inst_ptr] : instruction_map_) {
+  for (auto& [unused, inst_ptr] : instruction_map_) {
     delete inst_ptr;
   }
   instruction_map_.clear();
-  for (auto &[unused, element_ptr] : constant_map_) {
+  for (auto& [unused, element_ptr] : constant_map_) {
     delete element_ptr;
   }
   constant_map_.clear();
   // The ctx objects stored in resource_spec_map_ are owned by the Antlr4
   // parser, so just clear the map (don't delete those objects).
   resource_spec_map_.clear();
-  for (auto &[ignored, expr] : attribute_map_) {
+  for (auto& [ignored, expr] : attribute_map_) {
     delete expr;
   }
   attribute_map_.clear();
 }
 
-absl::Status Slot::AppendInstruction(Instruction *inst) {
+absl::Status Slot::AppendInstruction(Instruction* inst) {
   if (!is_templated()) {
     bool valid = inst->opcode()->ValidateDestLatencies(
         [](int l) -> bool { return l >= 0; });
@@ -195,8 +195,8 @@
       "Opcode '", name, "' already added to slot '", this->name(), "'"));
 }
 
-absl::Status Slot::AppendInheritedInstruction(Instruction *inst,
-                                              TemplateInstantiationArgs *args) {
+absl::Status Slot::AppendInheritedInstruction(Instruction* inst,
+                                              TemplateInstantiationArgs* args) {
   std::string name = inst->opcode()->name();
   if (!instruction_map_.contains(name)) {
     auto derived = inst->CreateDerivedInstruction(args);
@@ -219,7 +219,7 @@
       absl::StrCat("instruction already added: ", inst->opcode()->name()));
 }
 
-bool Slot::HasInstruction(const std::string &opcode_name) const {
+bool Slot::HasInstruction(const std::string& opcode_name) const {
   return instruction_map_.contains(opcode_name);
 }
 
@@ -227,16 +227,16 @@
 
 // Generates a string that is a unique key for the attributes to determine which
 // instructions can share attribute setter functions.
-std::string Slot::CreateAttributeLookupKey(const Instruction *inst) const {
+std::string Slot::CreateAttributeLookupKey(const Instruction* inst) const {
   std::string key;
-  for (auto const &[name, expr] : inst->attribute_map()) {
+  for (auto const& [name, expr] : inst->attribute_map()) {
     std::string value;
     auto result = expr->GetValue();
     if (!result.ok()) {
       absl::StrAppend(&key, name, "[e1]:");
       continue;
     }
-    auto *value_ptr = std::get_if<int>(&result.value());
+    auto* value_ptr = std::get_if<int>(&result.value());
     if (value_ptr == nullptr) {
       absl::StrAppend(&key, name, "[e2]:");
       continue;
@@ -249,7 +249,7 @@
 // Generate the attribute setter function that matches the "key" of the given
 // instruction.
 std::string Slot::GenerateAttributeSetterFcn(absl::string_view name,
-                                             const Instruction *inst) const {
+                                             const Instruction* inst) const {
   std::string output;
   absl::StrAppend(&output, "void ", name, "(Instruction *inst) {\n");
   if (!attribute_map_.empty()) {
@@ -258,14 +258,14 @@
                     "];\n"
                     "  attrs = {");
     std::string sep = "";
-    for (auto const &[name, expr] : inst->attribute_map()) {
+    for (auto const& [name, expr] : inst->attribute_map()) {
       auto result = expr->GetValue();
       if (!result.ok()) {
         absl::StrAppend(&output, "    #error Expression for '", name,
                         "' has no constant value\n");
         continue;
       }
-      int *value = std::get_if<int>(&result.value());
+      int* value = std::get_if<int>(&result.value());
       if (value == nullptr) {
         absl::StrAppend(&output, "    #error Expression for '", name,
                         "' does not have type int\n");
@@ -284,7 +284,7 @@
 
 // Return a function call string that will set the attributes for the given
 // instruction. If no such appropriate function exists, create one.
-std::string Slot::GenerateAttributeSetter(const Instruction *inst) {
+std::string Slot::GenerateAttributeSetter(const Instruction* inst) {
   auto key = CreateAttributeLookupKey(inst);
   auto iter = attribute_setter_name_map_->find(key);
   if (iter == attribute_setter_name_map_->end()) {
@@ -300,7 +300,7 @@
 
 namespace {
 
-std::string EscapeRegexCharacters(const std::string &str) {
+std::string EscapeRegexCharacters(const std::string& str) {
   std::string output;
   if (str.empty()) return output;
   auto pos = str.find_last_not_of(' ');
@@ -381,13 +381,13 @@
 }  // namespace
 
 std::tuple<std::string, std::vector<OperandLocator>> Slot::GenerateRegEx(
-    const Instruction *inst, std::vector<std::string> &formats) const {
+    const Instruction* inst, std::vector<std::string>& formats) const {
   std::string output = "R\"(";
   std::string sep = "^\\s*";
   std::vector<OperandLocator> opnd_locators;
   // Iterate over the vector of disasm formats. These will end up concatenated
   // with \s+ separators.
-  for (auto const *disasm_fmt : inst->disasm_format_vec()) {
+  for (auto const* disasm_fmt : inst->disasm_format_vec()) {
     absl::StrAppend(&output, sep);
     sep = "\\s+";
     // The fragments are the text part (not part of operands), that occur
@@ -451,7 +451,7 @@
   return {output, opnd_locators};
 }
 
-std::string GenerateEncodingFunctions(const std::string &encoder,
+std::string GenerateEncodingFunctions(const std::string& encoder,
                                       InstructionSet instruction_set) {
   std::string output;
   absl::StrAppend(&output, "namespace {\n\n");
@@ -525,7 +525,7 @@
                   "  if (index == -1) return absl::InternalError(error);\n"
                   "  regex_vec_.push_back(new RE2(\"^$\"));\n");
   std::vector<std::string> formats;
-  for (auto const &[name, inst_ptr] : instruction_map_) {
+  for (auto const& [name, inst_ptr] : instruction_map_) {
     auto [regex, opnd_locators] = GenerateRegEx(inst_ptr, formats);
     max_args = std::max(max_args, opnd_locators.size());
     std::string opcode_name =
@@ -625,7 +625,7 @@
 // Generate a function that will set the disassembly string for the given
 // instruction.
 std::string Slot::GenerateDisasmSetterFcn(absl::string_view name,
-                                          const Instruction *inst) const {
+                                          const Instruction* inst) const {
   std::string output;
   std::string class_name = pascal_name() + "Slot";
   absl::StrAppend(&output, "void ", name, "(Instruction *inst) {\n");
@@ -640,7 +640,7 @@
   in_strcat.push(true);
   outer_paren = true;
   std::string outer_sep;
-  for (auto const *disasm_fmt : inst->disasm_format_vec()) {
+  for (auto const* disasm_fmt : inst->disasm_format_vec()) {
     int inner_paren = 0;
     size_t index = 0;
     std::string inner_sep;
@@ -667,14 +667,14 @@
     }
     // Generate the strings from the format fragments and the format info.
     std::string next_sep;
-    for (auto const &frag : disasm_fmt->format_fragment_vec) {
+    for (auto const& frag : disasm_fmt->format_fragment_vec) {
       if (!frag.empty()) {
         absl::StrAppend(&output, inner_sep, indent_string(indent), "\"", frag,
                         "\"");
         next_sep = ", ";
       }
       if (index < disasm_fmt->format_info_vec.size()) {
-        auto *format_info = disasm_fmt->format_info_vec[index];
+        auto* format_info = disasm_fmt->format_info_vec[index];
         if (format_info->op_name.empty()) {
           if (!format_info->is_formatted) {
             absl::StrAppend(&output, "\n#error Missing locator information");
@@ -737,11 +737,11 @@
 // Generate a signature for the disassembly setter function required for the
 // given instruction. If a matching one does not exist, call to create such a
 // function.
-std::string Slot::GenerateDisassemblySetter(const Instruction *inst) {
+std::string Slot::GenerateDisassemblySetter(const Instruction* inst) {
   std::string key;
   // First combine the disassembly fragments.
-  for (auto const *format : inst->disasm_format_vec()) {
-    for (auto const &frag : format->format_fragment_vec) {
+  for (auto const* format : inst->disasm_format_vec()) {
+    for (auto const& frag : format->format_fragment_vec) {
       absl::StrAppend(&key, frag);
     }
   }
@@ -759,7 +759,7 @@
 }
 
 // Generate the assembler function for the given instruction.
-std::string Slot::GenerateAssemblerFcn(const Instruction *inst,
+std::string Slot::GenerateAssemblerFcn(const Instruction* inst,
                                        absl::string_view encoder_type) const {
   std::string output;
   int num_values = inst->opcode()->source_op_vec().size() +
@@ -778,7 +778,7 @@
       "auto [inst_word, num_bits] = enc->GetOpEncoding(opcode, slot, "
       "entry);\n",
       "  absl::Status status;\n");
-  auto const &source_op_vec = inst->opcode()->source_op_vec();
+  auto const& source_op_vec = inst->opcode()->source_op_vec();
   for (int i = 0; i < source_op_vec.size(); ++i) {
     std::string op_name = ToPascalCase(source_op_vec[i].name);
     absl::StrAppend(&output, "  status = enc->SetSrcEncoding(values.at(", i,
@@ -788,7 +788,7 @@
                     ", opcode);\n"
                     "  if (!stats.ok()) return status;\n");
   }
-  auto const &dest_op_vec = inst->opcode()->dest_op_vec();
+  auto const& dest_op_vec = inst->opcode()->dest_op_vec();
   for (int i = 0; i < dest_op_vec.size(); ++i) {
     absl::StrAppend(&output, "  status = enc->SetDestEncoding(values.at(", i,
                     "), slot, entry,\n"
@@ -811,13 +811,13 @@
 // Generate a string that is a unique identifier from the resources to
 // determine which instructions can share resource setter functions.
 std::string Slot::CreateResourceKey(
-    const std::vector<const ResourceReference *> &refs) const {
+    const std::vector<const ResourceReference*>& refs) const {
   std::string key;
-  std::vector<const ResourceReference *> complex_refs;
-  std::vector<const ResourceReference *> simple_refs;
+  std::vector<const ResourceReference*> complex_refs;
+  std::vector<const ResourceReference*> simple_refs;
   absl::btree_set<std::string> names;
   // Iterate over use resources.
-  for (auto const *ref : refs) {
+  for (auto const* ref : refs) {
     if (!ref->resource->is_simple()) {
       complex_refs.push_back(ref);
     } else {
@@ -825,7 +825,7 @@
     }
   }
   // Simple use resources.
-  for (auto const *ref : simple_refs) {
+  for (auto const* ref : simple_refs) {
     std::string name = "S$";
     if (ref->is_array) {
       absl::StrAppend(&name, "[", ref->resource->pascal_name(), "]");
@@ -835,7 +835,7 @@
     names.insert(name);
   }
   std::string sep = "";
-  for (auto const &name : names) {
+  for (auto const& name : names) {
     absl::StrAppend(&key, sep, name);
     sep = "/";
   }
@@ -843,7 +843,7 @@
   absl::StrAppend(&key, ":");
 
   // Complex use resources.
-  for (auto const *ref : complex_refs) {
+  for (auto const* ref : complex_refs) {
     std::string name = "C$";
     if (ref->is_array) {
       absl::StrAppend(&name, "[", ref->resource->pascal_name(), "]");
@@ -865,7 +865,7 @@
     names.insert(name);
   }
   sep = "";
-  for (auto const &name : names) {
+  for (auto const& name : names) {
     absl::StrAppend(&key, sep, name);
     sep = "/";
   }
@@ -875,7 +875,7 @@
 // Generate a resource setter function call for the resource "key" of the
 // given instruction. If a matching one does not exist, call to create such a
 // function.
-std::string Slot::GenerateResourceSetter(const Instruction *inst,
+std::string Slot::GenerateResourceSetter(const Instruction* inst,
                                          absl::string_view encoding_type) {
   std::string key = CreateResourceKey(inst->resource_use_vec());
   absl::StrAppend(&key, ":", CreateResourceKey(inst->resource_acquire_vec()));
@@ -894,7 +894,7 @@
 // Create a resource setter function for the resource "key" of the given
 // instruction.
 std::string Slot::GenerateResourceSetterFcn(
-    absl::string_view name, const Instruction *inst,
+    absl::string_view name, const Instruction* inst,
     absl::string_view encoding_type) const {
   std::string output;
   absl::StrAppend(&output, "void ", name, "(Instruction *inst, ", encoding_type,
@@ -911,9 +911,9 @@
   }
   // Get all the simple resources that need to be free, then all the complex
   // resources that need to be free in order to issue the instruction.
-  std::vector<const ResourceReference *> complex_refs;
-  std::vector<const ResourceReference *> simple_refs;
-  for (auto const *ref : inst->resource_use_vec()) {
+  std::vector<const ResourceReference*> complex_refs;
+  std::vector<const ResourceReference*> simple_refs;
+  for (auto const* ref : inst->resource_use_vec()) {
     // Do the complex refs last.
     if (!ref->resource->is_simple()) {
       complex_refs.push_back(ref);
@@ -926,7 +926,7 @@
     // First gather the resource references into a single vector, then request
     // the resource operands for all the resource references in that vector.
     absl::StrAppend(&output, "  std::vector<SimpleResourceEnum> hold_vec = {");
-    for (auto const *simple : simple_refs) {
+    for (auto const* simple : simple_refs) {
       std::string resource_name;
       if (simple->is_array) {
         resource_name = absl::StrCat("SimpleResourceEnum::k",
@@ -947,7 +947,7 @@
                     "  }\n");
   }
   // Complex resources.
-  for (auto const *complex : complex_refs) {
+  for (auto const* complex : complex_refs) {
     // Get the expression values for the begin and end expressions.
     auto begin_value = complex->begin_expression->GetValue();
     auto end_value = complex->end_expression->GetValue();
@@ -957,8 +957,8 @@
       continue;
     }
     // Get the integer values from the begin and end expression values.
-    int *begin = std::get_if<int>(&begin_value.value());
-    int *end = std::get_if<int>(&end_value.value());
+    int* begin = std::get_if<int>(&begin_value.value());
+    int* end = std::get_if<int>(&end_value.value());
     if ((begin == nullptr) || (end == nullptr)) {
       absl::StrAppend(
           &output, "#error Unable to get value of begin or end expression\n");
@@ -991,7 +991,7 @@
   // complex resources that need to be reserved when issuing this instruction.
   complex_refs.clear();
   simple_refs.clear();
-  for (auto const *ref : inst->resource_acquire_vec()) {
+  for (auto const* ref : inst->resource_acquire_vec()) {
     // Do the complex refs last.
     if (!ref->resource->is_simple()) {
       complex_refs.push_back(ref);
@@ -1003,9 +1003,9 @@
   if (!simple_refs.empty()) {
     // Compute the set of latencies. Insert each reference into a multi-map
     // keyed by the latency.
-    std::multimap<int, const ResourceReference *> latency_map;
+    std::multimap<int, const ResourceReference*> latency_map;
     absl::flat_hash_set<int> latencies;
-    for (auto const *simple : simple_refs) {
+    for (auto const* simple : simple_refs) {
       if (simple->end_expression == nullptr) {
         continue;
       }
@@ -1014,7 +1014,7 @@
         absl::StrAppend(&output, "#error Unable to evaluate end expression\n");
         continue;
       }
-      int *end = std::get_if<int>(&end_value.value());
+      int* end = std::get_if<int>(&end_value.value());
       if (end == nullptr) {
         absl::StrAppend(&output,
                         "#error Unable to get value of  end expression\n");
@@ -1031,7 +1031,7 @@
                       latency, " = {");
       for (auto iter = latency_map.lower_bound(latency);
            iter != latency_map.upper_bound(latency); ++iter) {
-        auto *simple = iter->second;
+        auto* simple = iter->second;
         std::string resource_name;
         if (simple->is_array) {
           resource_name = absl::StrCat("SimpleResourceEnum::k",
@@ -1056,7 +1056,7 @@
 
   // Complex resources.
   if (!complex_refs.empty()) {
-    for (auto const *complex : complex_refs) {
+    for (auto const* complex : complex_refs) {
       // Get the expression values for the begin and end expressions.
       if (complex->begin_expression == nullptr) continue;
       if (complex->end_expression == nullptr) continue;
@@ -1068,8 +1068,8 @@
         continue;
       }
       // Get the integer values from the begin and end expression values.
-      int *begin = std::get_if<int>(&begin_value.value());
-      int *end = std::get_if<int>(&end_value.value());
+      int* begin = std::get_if<int>(&begin_value.value());
+      int* end = std::get_if<int>(&end_value.value());
       if (complex->is_array) {
         absl::StrAppend(&output,
                         "  auto res_op_vec = "
@@ -1101,16 +1101,16 @@
 
 // Generates a string that is a unique identifier from the operands to
 // determine which instructions can share operand getter functions.
-std::string Slot::CreateOperandLookupKey(const Opcode *opcode) const {
+std::string Slot::CreateOperandLookupKey(const Opcode* opcode) const {
   std::string key;
   // Generate identifier for the predicate operand, if the opcode has one.
-  const std::string &op_name = opcode->predicate_op_name();
+  const std::string& op_name = opcode->predicate_op_name();
   if (!op_name.empty()) {
     absl::StrAppend(&key, op_name, ":");
   }
   // Generate key for the source operands.
   std::string sep = "";
-  for (const auto &src_op : opcode->source_op_vec()) {
+  for (const auto& src_op : opcode->source_op_vec()) {
     if (src_op.is_array) {
       absl::StrAppend(&key, sep, "[", src_op.name, "]");
     } else {
@@ -1121,7 +1121,7 @@
   absl::StrAppend(&key, ":");
   // Append identifier for destination operands.
   sep.clear();
-  for (auto const *dst_op : opcode->dest_op_vec()) {
+  for (auto const* dst_op : opcode->dest_op_vec()) {
     std::string dest_op_enum;
     if (dst_op->is_array()) {
       absl::StrAppend(&key, sep, "[", dst_op->name(), "]");
@@ -1157,7 +1157,7 @@
 // given opcode.
 std::string Slot::GenerateOperandSetterFcn(absl::string_view getter_name,
                                            absl::string_view encoding_type,
-                                           const Opcode *opcode) const {
+                                           const Opcode* opcode) const {
   std::string output;
   std::string optional_inst;
   if (generator_version_ == 2) {
@@ -1167,7 +1167,7 @@
                   encoding_type,
                   " *enc, OpcodeEnum opcode, SlotEnum slot, int entry) {\n");
   // Generate code to set predicate operand, if the opcode has one.
-  const std::string &op_name = opcode->predicate_op_name();
+  const std::string& op_name = opcode->predicate_op_name();
   if (!op_name.empty()) {
     std::string pred_op_enum =
         absl::StrCat("PredOpEnum::k", ToPascalCase(op_name));
@@ -1177,7 +1177,7 @@
   }
   // Generate code to set the instruction's source operands.
   int source_no = 0;
-  for (const auto &src_op : opcode->source_op_vec()) {
+  for (const auto& src_op : opcode->source_op_vec()) {
     // If the source operand is an array, then we need to iterate over the
     // vector of operands that GetSources returns.
     if (src_op.is_array) {
@@ -1201,7 +1201,7 @@
   }
   // Generate code to set the instruction's destination operands.
   int dest_no = 0;
-  for (auto const *dst_op : opcode->dest_op_vec()) {
+  for (auto const* dst_op : opcode->dest_op_vec()) {
     std::string dest_op_enum;
     if (dst_op->is_array()) {
       dest_op_enum =
@@ -1276,8 +1276,8 @@
       "    ", GenerateAttributeSetter(default_instruction_), ",\n",
       "    SemFuncSetter{", default_instruction_->semfunc_code_string(), "}, ",
       default_instruction_->opcode()->instruction_size(), "}},\n");
-  for (auto const &[unused, inst_ptr] : instruction_map_) {
-    auto *instruction = inst_ptr;
+  for (auto const& [unused, inst_ptr] : instruction_map_) {
+    auto* instruction = inst_ptr;
     std::string opcode_name = instruction->opcode()->pascal_name();
     std::string opcode_enum = absl::StrCat("OpcodeEnum::k", opcode_name);
     absl::StrAppend(&output, "\n  // ***   k", opcode_name, "   ***\n");
@@ -1286,7 +1286,7 @@
     std::string code_str;
     std::string sep = "";
     std::string operands_str;
-    for (auto const *inst = instruction; inst != nullptr;
+    for (auto const* inst = instruction; inst != nullptr;
          inst = inst->child()) {
       // Construct operand getter lookup key.
       std::string key = CreateOperandLookupKey(inst->opcode());
@@ -1402,23 +1402,23 @@
   return combined_output;
 }
 
-absl::Status Slot::CheckPredecessors(const Slot *base) const {
+absl::Status Slot::CheckPredecessors(const Slot* base) const {
   if (predecessor_set_.contains(base))
     return absl::AlreadyExistsError(
         absl::StrCat("'", base->name(),
                      "' is already in the predecessor set of '", name(), "'"));
-  for (auto const *pred : predecessor_set_) {
+  for (auto const* pred : predecessor_set_) {
     auto status = pred->CheckPredecessors(base);
     if (!status.ok()) return status;
   }
-  for (auto const *base_pred : base->predecessor_set_) {
+  for (auto const* base_pred : base->predecessor_set_) {
     auto status = CheckPredecessors(base_pred);
     if (!status.ok()) return status;
   }
   return absl::OkStatus();
 }
 
-absl::Status Slot::AddBase(const Slot *base) {
+absl::Status Slot::AddBase(const Slot* base) {
   // First need to check if the current slot already inherits from base, or
   // any of base's predecessors. Only tree-like inheritance is supported.
   auto status = CheckPredecessors(base);
@@ -1428,8 +1428,8 @@
   return absl::OkStatus();
 }
 
-absl::Status Slot::AddBase(const Slot *base,
-                           TemplateInstantiationArgs *arguments) {
+absl::Status Slot::AddBase(const Slot* base,
+                           TemplateInstantiationArgs* arguments) {
   auto status = CheckPredecessors(base);
   if (!status.ok()) return status;
   predecessor_set_.insert(base);
@@ -1437,9 +1437,9 @@
   return absl::OkStatus();
 }
 
-absl::Status Slot::AddConstant(const std::string &ident,
-                               const std::string &type,
-                               TemplateExpression *expression) {
+absl::Status Slot::AddConstant(const std::string& ident,
+                               const std::string& type,
+                               TemplateExpression* expression) {
   // Ignore the type for now - there is only int.
   (void)type;
   // Check if the name already exists or matches a template formal parameter.
@@ -1456,13 +1456,13 @@
   return absl::OkStatus();
 }
 
-TemplateExpression *Slot::GetConstExpression(const std::string &ident) const {
+TemplateExpression* Slot::GetConstExpression(const std::string& ident) const {
   auto iter = constant_map_.find(ident);
   if (iter == constant_map_.end()) return nullptr;
   return iter->second;
 }
 
-absl::Status Slot::AddTemplateFormal(const std::string &par_name) {
+absl::Status Slot::AddTemplateFormal(const std::string& par_name) {
   if (template_parameter_map_.contains(par_name)) {
     // Push it into the vector, but not the map. Have the formal name refer to
     // the previous index. Signal error. This allows us to properly match the
@@ -1479,14 +1479,14 @@
   return absl::OkStatus();
 }
 
-TemplateFormal *Slot::GetTemplateFormal(const std::string &name) const {
+TemplateFormal* Slot::GetTemplateFormal(const std::string& name) const {
   auto iter = template_parameter_map_.find(name);
   if (iter == template_parameter_map_.end()) return nullptr;
   return template_parameters_[iter->second];
 }
 
-void Slot::AddInstructionAttribute(const std::string &name,
-                                   TemplateExpression *expr) {
+void Slot::AddInstructionAttribute(const std::string& name,
+                                   TemplateExpression* expr) {
   attribute_map_.emplace(name, expr);
 }
 
diff --git a/mpact/sim/decoder/slot.h b/mpact/sim/decoder/slot.h
index d6a9367..9065874 100644
--- a/mpact/sim/decoder/slot.h
+++ b/mpact/sim/decoder/slot.h
@@ -44,8 +44,8 @@
 // A structure that holds the resources specified by a named resource specifier.
 struct ResourceSpec {
   std::string name;
-  std::vector<ResourceReference *> use_vec;
-  std::vector<ResourceReference *> acquire_vec;
+  std::vector<ResourceReference*> use_vec;
+  std::vector<ResourceReference*> acquire_vec;
 };
 
 // A slot class instance represents one or more identical instruction slots
@@ -61,71 +61,71 @@
       generated::InstructionSetParser::Resource_detailsContext;
 
   // Constructor and destructor.
-  Slot(absl::string_view name, InstructionSet *instruction_set,
-       bool is_templated, SlotDeclCtx *ctx, unsigned generator_version);
-  Slot(absl::string_view name, InstructionSet *instruction_set,
-       bool is_templated, SlotDeclCtx *ctx)
+  Slot(absl::string_view name, InstructionSet* instruction_set,
+       bool is_templated, SlotDeclCtx* ctx, unsigned generator_version);
+  Slot(absl::string_view name, InstructionSet* instruction_set,
+       bool is_templated, SlotDeclCtx* ctx)
       : Slot(name, instruction_set, is_templated, ctx, 1) {}
   ~Slot();
 
   // Add declared opcode to the current slot.
-  absl::Status AppendInstruction(Instruction *inst);
+  absl::Status AppendInstruction(Instruction* inst);
   // Add an opcode inherited from a base slot to the current slot.
-  absl::Status AppendInheritedInstruction(Instruction *inst,
-                                          TemplateInstantiationArgs *args);
+  absl::Status AppendInheritedInstruction(Instruction* inst,
+                                          TemplateInstantiationArgs* args);
   // Add default instruction attribute.
-  void AddInstructionAttribute(const std::string &name,
-                               TemplateExpression *expr);
-  bool HasInstruction(const std::string &opcode_name) const;
+  void AddInstructionAttribute(const std::string& name,
+                               TemplateExpression* expr);
+  bool HasInstruction(const std::string& opcode_name) const;
   // Return string for the header file declarations for this class.
   std::string GenerateClassDeclaration(absl::string_view encoding_type) const;
   // Return string for the .cc file definitions for this class.
   std::string GenerateClassDefinition(absl::string_view encoding_type);
 
   // Add a non-templated slot as a base.
-  absl::Status AddBase(const Slot *base);
+  absl::Status AddBase(const Slot* base);
   // Add a templated slot as a base with the vector of expressions as the
   // template parameter values.
-  absl::Status AddBase(const Slot *base, TemplateInstantiationArgs *arguments);
+  absl::Status AddBase(const Slot* base, TemplateInstantiationArgs* arguments);
   // Add a declared constant (scoped to the slot).
-  absl::Status AddConstant(const std::string &ident, const std::string &type,
-                           TemplateExpression *expression);
-  TemplateExpression *GetConstExpression(const std::string &ident) const;
+  absl::Status AddConstant(const std::string& ident, const std::string& type,
+                           TemplateExpression* expression);
+  TemplateExpression* GetConstExpression(const std::string& ident) const;
   // When the current slot is templated, adds an identifier as a template
   // formal parameter.
-  absl::Status AddTemplateFormal(const std::string &name);
-  TemplateFormal *GetTemplateFormal(const std::string &name) const;
+  absl::Status AddTemplateFormal(const std::string& name);
+  TemplateFormal* GetTemplateFormal(const std::string& name) const;
 
   // Generate the calls to encode the given operand.
   std::string GenerateOperandEncoder(int position, absl::string_view op_name,
-                                     const OperandLocator &locator,
-                                     const Opcode *opcode) const;
+                                     const OperandLocator& locator,
+                                     const Opcode* opcode) const;
   // Generate regex for a given instruction.
   std::tuple<std::string, std::vector<OperandLocator>> GenerateRegEx(
-      const Instruction *inst, std::vector<std::string> &formats) const;
+      const Instruction* inst, std::vector<std::string>& formats) const;
   // Generate regexes to match the assembly string for the instructions.
   std::tuple<std::string, std::string> GenerateAsmRegexMatcher() const;
   // Generate assembler function for the given instruction.
-  std::string GenerateAssemblerFcn(const Instruction *inst,
+  std::string GenerateAssemblerFcn(const Instruction* inst,
                                    absl::string_view encoder_type) const;
 
   // Resources
-  Resource *GetOrInsertResource(const std::string &name);
+  Resource* GetOrInsertResource(const std::string& name);
 
   // Getters and setters.
-  InstructionSet *instruction_set() const { return instruction_set_; }
-  const SlotDeclCtx *ctx() const { return ctx_; }
+  InstructionSet* instruction_set() const { return instruction_set_; }
+  const SlotDeclCtx* ctx() const { return ctx_; }
   int default_instruction_size() const { return default_instruction_size_; }
   void set_default_instruction_size(int val) {
     default_instruction_size_ = val;
   }
-  TemplateExpression *default_latency() const { return default_latency_; }
-  void set_default_latency(TemplateExpression *latency_expr) {
+  TemplateExpression* default_latency() const { return default_latency_; }
+  void set_default_latency(TemplateExpression* latency_expr) {
     if (default_latency_ != nullptr) delete default_latency_;
     default_latency_ = latency_expr;
   }
-  Instruction *default_instruction() const { return default_instruction_; }
-  void set_default_instruction(Instruction *inst) {
+  Instruction* default_instruction() const { return default_instruction_; }
+  void set_default_instruction(Instruction* inst) {
     default_instruction_ = inst;
   }
   int size() const { return size_; }
@@ -137,55 +137,55 @@
   void set_is_marked(bool value) { is_marked_ = value; }
   void set_is_referenced(bool value) { is_referenced_ = value; }
   bool is_referenced() const { return is_referenced_; }
-  const std::string &name() const { return name_; }
-  const std::string &pascal_name() const { return pascal_name_; }
-  const std::vector<BaseSlot> &base_slots() const { return base_slots_; }
-  const absl::btree_map<std::string, Instruction *> &instruction_map() const {
+  const std::string& name() const { return name_; }
+  const std::string& pascal_name() const { return pascal_name_; }
+  const std::vector<BaseSlot>& base_slots() const { return base_slots_; }
+  const absl::btree_map<std::string, Instruction*>& instruction_map() const {
     return instruction_map_;
   }
-  const std::vector<TemplateFormal *> &template_parameters() const {
+  const std::vector<TemplateFormal*>& template_parameters() const {
     return template_parameters_;
   }
-  const absl::flat_hash_map<std::string, int> &template_parameter_map() const {
+  const absl::flat_hash_map<std::string, int>& template_parameter_map() const {
     return template_parameter_map_;
   }
-  absl::btree_map<std::string, ResourceDetailsCtx *> &resource_spec_map() {
+  absl::btree_map<std::string, ResourceDetailsCtx*>& resource_spec_map() {
     return resource_spec_map_;
   }
-  absl::btree_map<std::string, IdentListCtx *> &resource_array_ref_map() {
+  absl::btree_map<std::string, IdentListCtx*>& resource_array_ref_map() {
     return resource_array_ref_map_;
   }
-  const absl::btree_map<std::string, TemplateExpression *> &attribute_map() {
+  const absl::btree_map<std::string, TemplateExpression*>& attribute_map() {
     return attribute_map_;
   }
 
  private:
   // These functions generate the functions that are called by the decoder to
   // set the instruction operands.
-  std::string CreateOperandLookupKey(const Opcode *opcode) const;
+  std::string CreateOperandLookupKey(const Opcode* opcode) const;
   std::string GenerateOperandSetterFcn(absl::string_view getter_name,
                                        absl::string_view encoding_type,
-                                       const Opcode *opcode) const;
+                                       const Opcode* opcode) const;
   // These functions generate the functions that are called by the decoder to
   // set the instruction resources.
   std::string CreateResourceKey(
-      const std::vector<const ResourceReference *> &refs) const;
-  std::string GenerateResourceSetter(const Instruction *inst,
+      const std::vector<const ResourceReference*>& refs) const;
+  std::string GenerateResourceSetter(const Instruction* inst,
                                      absl::string_view encoding_type);
   std::string GenerateResourceSetterFcn(absl::string_view name,
-                                        const Instruction *inst,
+                                        const Instruction* inst,
                                         absl::string_view encoding_type) const;
   // These functions generate the functions that are called by the decoder to
   // set the instruction disassembly string.
-  std::string GenerateDisassemblySetter(const Instruction *inst);
+  std::string GenerateDisassemblySetter(const Instruction* inst);
   std::string GenerateDisasmSetterFcn(absl::string_view name,
-                                      const Instruction *inst) const;
+                                      const Instruction* inst) const;
   // These functions generate the functions that are called by the decoder to
   // set the instruction attributes.
-  std::string GenerateAttributeSetter(const Instruction *inst);
+  std::string GenerateAttributeSetter(const Instruction* inst);
   std::string GenerateAttributeSetterFcn(absl::string_view name,
-                                         const Instruction *inst) const;
-  std::string CreateAttributeLookupKey(const Instruction *inst) const;
+                                         const Instruction* inst) const;
+  std::string CreateAttributeLookupKey(const Instruction* inst) const;
   // Generates a string that is a unique key for the operands to determine which
   // instructions can share operand getter functions.
   // Build up a string containing the function getter initializers that are
@@ -197,18 +197,18 @@
   // slot or any of its inheritance predecessors. Returns AlreadyExistsError
   // if the current slot or its predecessors already inherit from base or its
   // predecessors.
-  absl::Status CheckPredecessors(const Slot *base) const;
+  absl::Status CheckPredecessors(const Slot* base) const;
   // Parent instruction_set class.
-  InstructionSet *instruction_set_;
+  InstructionSet* instruction_set_;
   // Parser context.
-  SlotDeclCtx *ctx_ = nullptr;
+  SlotDeclCtx* ctx_ = nullptr;
   // The default and minimum opcode size specified for the slot.
   int default_instruction_size_ = 1;
   int min_instruction_size_ = std::numeric_limits<int>::max();
   // Default latency for destination operands.
-  TemplateExpression *default_latency_ = nullptr;
+  TemplateExpression* default_latency_ = nullptr;
   // Fallback opcode for failed decodes.
-  Instruction *default_instruction_ = nullptr;
+  Instruction* default_instruction_ = nullptr;
   // Number of instances of this slot in the instruction_set instruction word.
   int size_ = 1;
   unsigned generator_version_;
@@ -223,7 +223,7 @@
   std::string pascal_name_;
   // Pointer to slot it inherits from.
   std::vector<BaseSlot> base_slots_;
-  absl::flat_hash_set<const Slot *> predecessor_set_;
+  absl::flat_hash_set<const Slot*> predecessor_set_;
   // Map from operand getter key to operand getter function name. These are
   // static so that they can be shared across different slots.
   static absl::NoDestructor<absl::flat_hash_map<std::string, std::string>>
@@ -240,17 +240,17 @@
   absl::flat_hash_set<std::string> src_operand_getters_;
   absl::flat_hash_set<std::string> dst_operand_getters_;
   // Map of instructions defined in this slot or inherited.
-  absl::btree_map<std::string, Instruction *> instruction_map_;
+  absl::btree_map<std::string, Instruction*> instruction_map_;
   absl::flat_hash_set<std::string> operand_setters_;
   // Template parameter names.
-  std::vector<TemplateFormal *> template_parameters_;
+  std::vector<TemplateFormal*> template_parameters_;
   absl::flat_hash_map<std::string, int> template_parameter_map_;
-  absl::flat_hash_map<std::string, TemplateExpression *> constant_map_;
+  absl::flat_hash_map<std::string, TemplateExpression*> constant_map_;
   // Named resource specifiers.
-  absl::btree_map<std::string, ResourceDetailsCtx *> resource_spec_map_;
-  absl::btree_map<std::string, IdentListCtx *> resource_array_ref_map_;
+  absl::btree_map<std::string, ResourceDetailsCtx*> resource_spec_map_;
+  absl::btree_map<std::string, IdentListCtx*> resource_array_ref_map_;
   // Default instruction attributes.
-  absl::btree_map<std::string, TemplateExpression *> attribute_map_;
+  absl::btree_map<std::string, TemplateExpression*> attribute_map_;
 };
 
 }  // namespace instruction_set
diff --git a/mpact/sim/decoder/template_expression.cc b/mpact/sim/decoder/template_expression.cc
index 5b651d9..8d88e7c 100644
--- a/mpact/sim/decoder/template_expression.cc
+++ b/mpact/sim/decoder/template_expression.cc
@@ -29,10 +29,10 @@
 // nodes. If there is an error in the expression evaluation the error is
 // propagated to the top.
 static absl::StatusOr<TemplateValue> operator-(
-    const absl::StatusOr<TemplateValue> &lhs) {
+    const absl::StatusOr<TemplateValue>& lhs) {
   if (lhs.ok()) {
     auto variant_value = lhs.value();
-    int *value_ptr = std::get_if<int>(&variant_value);
+    int* value_ptr = std::get_if<int>(&variant_value);
     if (value_ptr != nullptr) {
       return -*value_ptr;
     } else {
@@ -46,16 +46,16 @@
 // that is member of the TemplateValue variant.
 template <typename T>
 static absl::StatusOr<TemplateValue> OperatorHelper(
-    const absl::StatusOr<TemplateValue> &lhs,
-    const absl::StatusOr<TemplateValue> &rhs,
+    const absl::StatusOr<TemplateValue>& lhs,
+    const absl::StatusOr<TemplateValue>& rhs,
     std::function<absl::StatusOr<TemplateValue>(T, T)> func) {
   if (!lhs.ok()) return lhs.status();
   if (!rhs.ok()) return rhs.status();
   auto lhs_variant = lhs.value();
   auto rhs_variant = rhs.value();
 
-  int *lhs_value = std::get_if<T>(&lhs_variant);
-  int *rhs_value = std::get_if<T>(&rhs_variant);
+  int* lhs_value = std::get_if<T>(&lhs_variant);
+  int* rhs_value = std::get_if<T>(&rhs_variant);
 
   if (lhs_value == nullptr) return absl::InternalError("int type expected");
   if (rhs_value == nullptr) return absl::InternalError("int type expected");
@@ -64,8 +64,8 @@
 }
 
 static absl::StatusOr<TemplateValue> operator+(
-    const absl::StatusOr<TemplateValue> &lhs,
-    const absl::StatusOr<TemplateValue> &rhs) {
+    const absl::StatusOr<TemplateValue>& lhs,
+    const absl::StatusOr<TemplateValue>& rhs) {
   return OperatorHelper<int>(
       lhs, rhs,
       [](int lhs_value, int rhs_value) -> absl::StatusOr<TemplateValue> {
@@ -74,8 +74,8 @@
 }
 
 static absl::StatusOr<TemplateValue> operator-(
-    const absl::StatusOr<TemplateValue> &lhs,
-    const absl::StatusOr<TemplateValue> &rhs) {
+    const absl::StatusOr<TemplateValue>& lhs,
+    const absl::StatusOr<TemplateValue>& rhs) {
   return OperatorHelper<int>(
       lhs, rhs,
       [](int lhs_value, int rhs_value) -> absl::StatusOr<TemplateValue> {
@@ -84,8 +84,8 @@
 }
 
 static absl::StatusOr<TemplateValue> operator*(
-    const absl::StatusOr<TemplateValue> &lhs,
-    const absl::StatusOr<TemplateValue> &rhs) {
+    const absl::StatusOr<TemplateValue>& lhs,
+    const absl::StatusOr<TemplateValue>& rhs) {
   return OperatorHelper<int>(
       lhs, rhs,
       [](int lhs_value, int rhs_value) -> absl::StatusOr<TemplateValue> {
@@ -94,8 +94,8 @@
 }
 
 static absl::StatusOr<TemplateValue> operator/(
-    const absl::StatusOr<TemplateValue> &lhs,
-    const absl::StatusOr<TemplateValue> &rhs) {
+    const absl::StatusOr<TemplateValue>& lhs,
+    const absl::StatusOr<TemplateValue>& rhs) {
   return OperatorHelper<int>(
       lhs, rhs,
       [](int lhs_value, int rhs_value) -> absl::StatusOr<TemplateValue> {
@@ -105,12 +105,12 @@
 }
 
 // Evaluate of constant only returns a copy.
-absl::StatusOr<TemplateExpression *> TemplateConstant::Evaluate(
-    TemplateInstantiationArgs *) {
+absl::StatusOr<TemplateExpression*> TemplateConstant::Evaluate(
+    TemplateInstantiationArgs*) {
   return new TemplateConstant(value_);
 }
 
-TemplateExpression *TemplateConstant::DeepCopy() const {
+TemplateExpression* TemplateConstant::DeepCopy() const {
   return new TemplateConstant(value_);
 }
 
@@ -120,12 +120,12 @@
   return expr_->GetValue();
 }
 
-absl::StatusOr<TemplateExpression *> SlotConstant::Evaluate(
-    TemplateInstantiationArgs *args) {
+absl::StatusOr<TemplateExpression*> SlotConstant::Evaluate(
+    TemplateInstantiationArgs* args) {
   return expr_->Evaluate(args);
 }
 
-TemplateExpression *SlotConstant::DeepCopy() const { return expr_->DeepCopy(); }
+TemplateExpression* SlotConstant::DeepCopy() const { return expr_->DeepCopy(); }
 
 // A template parameter has no value in the expression unless replaced by
 // the actual argument expression tree.
@@ -134,8 +134,8 @@
 }
 
 // Returns an evaluated copy of the corresponding argument expression tree.
-absl::StatusOr<TemplateExpression *> TemplateParam::Evaluate(
-    TemplateInstantiationArgs *args) {
+absl::StatusOr<TemplateExpression*> TemplateParam::Evaluate(
+    TemplateInstantiationArgs* args) {
   // No template arguments available, so just return the template parameter.
   if (args == nullptr) {
     return new TemplateParam(param_);
@@ -143,7 +143,7 @@
   if (param_->position() >= args->size()) {
     return absl::InternalError("Template parameter position out of range");
   }
-  TemplateExpression *expr = (*args)[param_->position()];
+  TemplateExpression* expr = (*args)[param_->position()];
   if (expr->IsConstant()) {
     auto result = expr->GetValue();
     if (result.ok()) return new TemplateConstant(result.value());
@@ -155,7 +155,7 @@
   return (*args)[param_->position()]->Evaluate(nullptr);
 }
 
-TemplateExpression *TemplateParam::DeepCopy() const {
+TemplateExpression* TemplateParam::DeepCopy() const {
   return new TemplateParam(param_);
 }
 
@@ -169,8 +169,8 @@
   return -expr_->GetValue();
 }
 
-absl::StatusOr<TemplateExpression *> TemplateNegate::Evaluate(
-    TemplateInstantiationArgs *args) {
+absl::StatusOr<TemplateExpression*> TemplateNegate::Evaluate(
+    TemplateInstantiationArgs* args) {
   auto expr = expr_->Evaluate(args);
   if (!expr.ok()) return expr.status();
   // If expression is constant then can return a constant node.
@@ -187,36 +187,36 @@
   }
 }
 
-TemplateExpression *TemplateNegate::DeepCopy() const {
+TemplateExpression* TemplateNegate::DeepCopy() const {
   return new TemplateNegate(expr_->DeepCopy());
 }
 
 absl::StatusOr<TemplateValue> TemplateMultiply::Operator(
-    const absl::StatusOr<TemplateValue> &lhs,
-    const absl::StatusOr<TemplateValue> &rhs) {
+    const absl::StatusOr<TemplateValue>& lhs,
+    const absl::StatusOr<TemplateValue>& rhs) {
   return lhs * rhs;
 }
 
 absl::StatusOr<TemplateValue> TemplateDivide::Operator(
-    const absl::StatusOr<TemplateValue> &lhs,
-    const absl::StatusOr<TemplateValue> &rhs) {
+    const absl::StatusOr<TemplateValue>& lhs,
+    const absl::StatusOr<TemplateValue>& rhs) {
   return lhs / rhs;
 }
 
 absl::StatusOr<TemplateValue> TemplateAdd::Operator(
-    const absl::StatusOr<TemplateValue> &lhs,
-    const absl::StatusOr<TemplateValue> &rhs) {
+    const absl::StatusOr<TemplateValue>& lhs,
+    const absl::StatusOr<TemplateValue>& rhs) {
   return lhs + rhs;
 }
 
 absl::StatusOr<TemplateValue> TemplateSubtract::Operator(
-    const absl::StatusOr<TemplateValue> &lhs,
-    const absl::StatusOr<TemplateValue> &rhs) {
+    const absl::StatusOr<TemplateValue>& lhs,
+    const absl::StatusOr<TemplateValue>& rhs) {
   return lhs - rhs;
 }
 
 TemplateFunction::~TemplateFunction() {
-  for (auto *arg : *args_) {
+  for (auto* arg : *args_) {
     delete arg;
   }
   delete args_;
@@ -229,13 +229,13 @@
   return absl::InternalError("Cannot evaluate function with unbound arguments");
 }
 
-absl::StatusOr<TemplateExpression *> TemplateFunction::Evaluate(
-    TemplateInstantiationArgs *args) {
+absl::StatusOr<TemplateExpression*> TemplateFunction::Evaluate(
+    TemplateInstantiationArgs* args) {
   auto new_arguments = new TemplateInstantiationArgs;
-  for (auto *arg : *args_) {
+  for (auto* arg : *args_) {
     auto result = arg->Evaluate(args);
     if (!result.ok()) {
-      for (auto *tmp : *new_arguments) {
+      for (auto* tmp : *new_arguments) {
         delete tmp;
       }
       delete new_arguments;
@@ -247,15 +247,15 @@
 }
 
 bool TemplateFunction::IsConstant() const {
-  for (auto *arg : *args_) {
+  for (auto* arg : *args_) {
     if (!arg->IsConstant()) return false;
   }
   return true;
 }
 
-TemplateExpression *TemplateFunction::DeepCopy() const {
-  auto *args = new TemplateInstantiationArgs;
-  for (auto *arg : *args_) {
+TemplateExpression* TemplateFunction::DeepCopy() const {
+  auto* args = new TemplateInstantiationArgs;
+  for (auto* arg : *args_) {
     args->push_back(arg->DeepCopy());
   }
   return new TemplateFunction(evaluator_, args);
diff --git a/mpact/sim/decoder/template_expression.h b/mpact/sim/decoder/template_expression.h
index f9a604d..0ba9bc9 100644
--- a/mpact/sim/decoder/template_expression.h
+++ b/mpact/sim/decoder/template_expression.h
@@ -46,7 +46,7 @@
   TemplateFormal(std::string name, int position)
       : name_(std::move(name)), position_(position) {}
 
-  const std::string &name() const { return name_; }
+  const std::string& name() const { return name_; }
   size_t position() const { return position_; }
 
  private:
@@ -59,7 +59,7 @@
 // parameters.
 
 class TemplateExpression;
-using TemplateInstantiationArgs = std::vector<TemplateExpression *>;
+using TemplateInstantiationArgs = std::vector<TemplateExpression*>;
 
 // Virtual base class for template expressions.
 class TemplateExpression {
@@ -74,11 +74,11 @@
   // subexpressions are collapsed into constant nodes wherever possible. Note
   // that the argument expressions may themselves contain template parameters
   // for the "surrounding" template, so it may not resolve to a constant value.
-  virtual absl::StatusOr<TemplateExpression *> Evaluate(
-      TemplateInstantiationArgs *) = 0;
+  virtual absl::StatusOr<TemplateExpression*> Evaluate(
+      TemplateInstantiationArgs*) = 0;
   // Returns true if the expression can be evaluated to a constant.
   virtual bool IsConstant() const = 0;
-  virtual TemplateExpression *DeepCopy() const = 0;
+  virtual TemplateExpression* DeepCopy() const = 0;
 };
 
 // Constant value expression node.
@@ -87,10 +87,10 @@
   explicit TemplateConstant(int val) : value_(val) {}
   explicit TemplateConstant(TemplateValue val) : value_(val) {}
   absl::StatusOr<TemplateValue> GetValue() const override { return value_; }
-  absl::StatusOr<TemplateExpression *> Evaluate(
-      TemplateInstantiationArgs *) override;
+  absl::StatusOr<TemplateExpression*> Evaluate(
+      TemplateInstantiationArgs*) override;
   bool IsConstant() const override { return true; }
-  TemplateExpression *DeepCopy() const override;
+  TemplateExpression* DeepCopy() const override;
 
  private:
   TemplateValue value_;
@@ -102,11 +102,11 @@
 template <typename T>
 class BinaryTemplateExpression : public TemplateExpression {
  public:
-  TemplateExpression *DeepCopy() const final {
+  TemplateExpression* DeepCopy() const final {
     return new T(lhs_->DeepCopy(), rhs_->DeepCopy());
   }
-  absl::StatusOr<TemplateExpression *> Evaluate(
-      TemplateInstantiationArgs *args) final {
+  absl::StatusOr<TemplateExpression*> Evaluate(
+      TemplateInstantiationArgs* args) final {
     auto lhs = lhs_->Evaluate(args);
     if (!lhs.ok()) return lhs.status();
 
@@ -141,7 +141,7 @@
 
  protected:
   BinaryTemplateExpression() = delete;
-  BinaryTemplateExpression(TemplateExpression *lhs, TemplateExpression *rhs)
+  BinaryTemplateExpression(TemplateExpression* lhs, TemplateExpression* rhs)
       : lhs_(lhs), rhs_(rhs) {}
   ~BinaryTemplateExpression() override {
     delete lhs_;
@@ -151,111 +151,111 @@
   }
 
  private:
-  TemplateExpression *lhs_;
-  TemplateExpression *rhs_;
+  TemplateExpression* lhs_;
+  TemplateExpression* rhs_;
 };
 
 // Slot constant.
 class SlotConstant : public TemplateExpression {
  public:
-  explicit SlotConstant(TemplateExpression *expr) : expr_(expr) {}
+  explicit SlotConstant(TemplateExpression* expr) : expr_(expr) {}
   ~SlotConstant() override;
   absl::StatusOr<TemplateValue> GetValue() const override;
-  absl::StatusOr<TemplateExpression *> Evaluate(
-      TemplateInstantiationArgs *args) override;
+  absl::StatusOr<TemplateExpression*> Evaluate(
+      TemplateInstantiationArgs* args) override;
   bool IsConstant() const override { return expr_->IsConstant(); }
-  TemplateExpression *DeepCopy() const override;
+  TemplateExpression* DeepCopy() const override;
 
  private:
-  TemplateExpression *expr_ = nullptr;
+  TemplateExpression* expr_ = nullptr;
 };
 
 // Template formal parameter reference expression node.
 class TemplateParam : public TemplateExpression {
  public:
-  explicit TemplateParam(TemplateFormal *param) : param_(param) {}
+  explicit TemplateParam(TemplateFormal* param) : param_(param) {}
   absl::StatusOr<TemplateValue> GetValue() const override;
-  absl::StatusOr<TemplateExpression *> Evaluate(
-      TemplateInstantiationArgs *args) override;
+  absl::StatusOr<TemplateExpression*> Evaluate(
+      TemplateInstantiationArgs* args) override;
   bool IsConstant() const override { return false; }
-  TemplateExpression *DeepCopy() const override;
+  TemplateExpression* DeepCopy() const override;
 
  private:
-  TemplateFormal *param_;
+  TemplateFormal* param_;
 };
 
 // Negate expression node.
 class TemplateNegate : public TemplateExpression {
  public:
-  explicit TemplateNegate(TemplateExpression *expr) : expr_(expr) {}
+  explicit TemplateNegate(TemplateExpression* expr) : expr_(expr) {}
   ~TemplateNegate() override;
   absl::StatusOr<TemplateValue> GetValue() const override;
-  absl::StatusOr<TemplateExpression *> Evaluate(
-      TemplateInstantiationArgs *args) override;
+  absl::StatusOr<TemplateExpression*> Evaluate(
+      TemplateInstantiationArgs* args) override;
   bool IsConstant() const override { return expr_->IsConstant(); }
-  TemplateExpression *DeepCopy() const override;
+  TemplateExpression* DeepCopy() const override;
 
  private:
-  TemplateExpression *expr_;
+  TemplateExpression* expr_;
 };
 
 // Multiply expression node.
 class TemplateMultiply : public BinaryTemplateExpression<TemplateMultiply> {
  public:
-  TemplateMultiply(TemplateExpression *lhs, TemplateExpression *rhs)
+  TemplateMultiply(TemplateExpression* lhs, TemplateExpression* rhs)
       : BinaryTemplateExpression(lhs, rhs) {}
   static absl::StatusOr<TemplateValue> Operator(
-      const absl::StatusOr<TemplateValue> &lhs,
-      const absl::StatusOr<TemplateValue> &rhs);
+      const absl::StatusOr<TemplateValue>& lhs,
+      const absl::StatusOr<TemplateValue>& rhs);
 };
 
 // Divide expression node.
 class TemplateDivide : public BinaryTemplateExpression<TemplateDivide> {
  public:
-  TemplateDivide(TemplateExpression *lhs, TemplateExpression *rhs)
+  TemplateDivide(TemplateExpression* lhs, TemplateExpression* rhs)
       : BinaryTemplateExpression(lhs, rhs) {}
   static absl::StatusOr<TemplateValue> Operator(
-      const absl::StatusOr<TemplateValue> &lhs,
-      const absl::StatusOr<TemplateValue> &rhs);
+      const absl::StatusOr<TemplateValue>& lhs,
+      const absl::StatusOr<TemplateValue>& rhs);
 };
 
 // Add expression node.
 class TemplateAdd : public BinaryTemplateExpression<TemplateAdd> {
  public:
-  TemplateAdd(TemplateExpression *lhs, TemplateExpression *rhs)
+  TemplateAdd(TemplateExpression* lhs, TemplateExpression* rhs)
       : BinaryTemplateExpression(lhs, rhs) {}
   static absl::StatusOr<TemplateValue> Operator(
-      const absl::StatusOr<TemplateValue> &lhs,
-      const absl::StatusOr<TemplateValue> &rhs);
+      const absl::StatusOr<TemplateValue>& lhs,
+      const absl::StatusOr<TemplateValue>& rhs);
 };
 
 // Subtract expression node.
 class TemplateSubtract : public BinaryTemplateExpression<TemplateSubtract> {
  public:
-  TemplateSubtract(TemplateExpression *lhs, TemplateExpression *rhs)
+  TemplateSubtract(TemplateExpression* lhs, TemplateExpression* rhs)
       : BinaryTemplateExpression(lhs, rhs) {}
   static absl::StatusOr<TemplateValue> Operator(
-      const absl::StatusOr<TemplateValue> &lhs,
-      const absl::StatusOr<TemplateValue> &rhs);
+      const absl::StatusOr<TemplateValue>& lhs,
+      const absl::StatusOr<TemplateValue>& rhs);
 };
 
 // Function expression node.
 class TemplateFunction : public TemplateExpression {
  public:
   using Evaluator =
-      std::function<absl::StatusOr<TemplateValue>(TemplateInstantiationArgs *)>;
-  TemplateFunction(Evaluator evaluator, TemplateInstantiationArgs *args)
+      std::function<absl::StatusOr<TemplateValue>(TemplateInstantiationArgs*)>;
+  TemplateFunction(Evaluator evaluator, TemplateInstantiationArgs* args)
       : evaluator_(std::move(evaluator)), args_(args) {}
   ~TemplateFunction() override;
   absl::StatusOr<TemplateValue> GetValue() const override;
-  absl::StatusOr<TemplateExpression *> Evaluate(
-      TemplateInstantiationArgs *args) override;
+  absl::StatusOr<TemplateExpression*> Evaluate(
+      TemplateInstantiationArgs* args) override;
   bool IsConstant() const override;
-  TemplateExpression *DeepCopy() const override;
+  TemplateExpression* DeepCopy() const override;
 
  private:
   Evaluator evaluator_;
-  TemplateInstantiationArgs *args_;
+  TemplateInstantiationArgs* args_;
 };
 
 }  // namespace instruction_set
diff --git a/mpact/sim/decoder/test/array_operand_test.cc b/mpact/sim/decoder/test/array_operand_test.cc
index c0bdb3f..36dc54e 100644
--- a/mpact/sim/decoder/test/array_operand_test.cc
+++ b/mpact/sim/decoder/test/array_operand_test.cc
@@ -61,7 +61,7 @@
     }
     // Write instructions to memory - 16 each of pushes and pops. The first
     // 4 of each are illegal instructions since rlist < 4.
-    DataBuffer *db = state_->db_factory()->Allocate<uint16_t>(1);
+    DataBuffer* db = state_->db_factory()->Allocate<uint16_t>(1);
     for (int i = 0; i < 16; i++) {
       db->Set<uint16_t>(0, GeneratePushInstruction(i, i & 0x3));
       memory_->Store(kBase + i * db->size<uint8_t>(), db);
@@ -82,7 +82,7 @@
 // Verify that the push instructions are decoded correctly.
 TEST_F(ArrayOperandTest, PushInstructionDecoding) {
   for (int i = 0; i < 16; i++) {
-    auto *inst = decoder_->DecodeInstruction(kBase + i * 2);
+    auto* inst = decoder_->DecodeInstruction(kBase + i * 2);
     CHECK_NE(inst, nullptr);
     if (i < 4) {
       EXPECT_EQ(inst->opcode(), *OpcodeEnum::kNone);
@@ -96,7 +96,7 @@
 // Verify that the pop instructions are decoded correctly.
 TEST_F(ArrayOperandTest, PopInstructionDecoding) {
   for (int i = 0; i < 16; i++) {
-    auto *inst = decoder_->DecodeInstruction(kBase + 16 * 2 + i * 2);
+    auto* inst = decoder_->DecodeInstruction(kBase + 16 * 2 + i * 2);
     CHECK_NE(inst, nullptr);
     if (i < 4) {
       EXPECT_EQ(inst->opcode(), *OpcodeEnum::kNone);
@@ -111,7 +111,7 @@
 // destination operands.
 TEST_F(ArrayOperandTest, PushOperands) {
   for (int i = 4; i < 16; i++) {
-    auto *inst = decoder_->DecodeInstruction(kBase + i * 2);
+    auto* inst = decoder_->DecodeInstruction(kBase + i * 2);
     CHECK_NE(inst, nullptr);
     EXPECT_EQ(inst->opcode(), *OpcodeEnum::kPush)
         << inst->AsString() << " for instruction " << i;
@@ -130,7 +130,7 @@
 // destination operands.
 TEST_F(ArrayOperandTest, PopOperands) {
   for (int i = 4; i < 16; i++) {
-    auto *inst = decoder_->DecodeInstruction(kBase + 16 * 2 + i * 2);
+    auto* inst = decoder_->DecodeInstruction(kBase + 16 * 2 + i * 2);
     CHECK_NE(inst, nullptr);
     EXPECT_EQ(inst->opcode(), *OpcodeEnum::kPop)
         << inst->AsString() << " for instruction " << i;
diff --git a/mpact/sim/decoder/test/bin_encoding_info_test.cc b/mpact/sim/decoder/test/bin_encoding_info_test.cc
index 1cc5117..79c8f91 100644
--- a/mpact/sim/decoder/test/bin_encoding_info_test.cc
+++ b/mpact/sim/decoder/test/bin_encoding_info_test.cc
@@ -19,7 +19,7 @@
 constexpr char kIncludeFile0[] = "IncludeFile0";
 constexpr char kIncludeFile1[] = "IncludeFile1";
 constexpr char kIncludeFile2[] = "IncludeFile2";
-constexpr const char *kIncludeFiles[] = {kIncludeFile0, kIncludeFile1,
+constexpr const char* kIncludeFiles[] = {kIncludeFile0, kIncludeFile1,
                                          kIncludeFile2};
 constexpr char kFormat0[] = "Format0";
 constexpr char kFormat1[] = "Format1";
@@ -40,8 +40,8 @@
     delete error_listener_;
   }
 
-  DecoderErrorListener *error_listener_ = nullptr;
-  BinEncodingInfo *bin_encoding_info_ = nullptr;
+  DecoderErrorListener* error_listener_ = nullptr;
+  BinEncodingInfo* bin_encoding_info_ = nullptr;
 };
 
 // Test for proper initialization of object.
@@ -57,11 +57,11 @@
 // Test that include files are properly added/kept.
 TEST_F(BinEncodingInfoTest, AddIncludeFile) {
   EXPECT_TRUE(bin_encoding_info_->include_files().empty());
-  for (auto const &include_file : kIncludeFiles) {
+  for (auto const& include_file : kIncludeFiles) {
     bin_encoding_info_->AddIncludeFile(include_file);
   }
   EXPECT_FALSE(bin_encoding_info_->include_files().empty());
-  for (auto const &include_file : kIncludeFiles) {
+  for (auto const& include_file : kIncludeFiles) {
     EXPECT_TRUE(bin_encoding_info_->include_files().contains(include_file));
   }
   EXPECT_FALSE(bin_encoding_info_->include_files().contains("NoIncludeFile"));
@@ -72,12 +72,12 @@
   // Adding a new format should work.
   auto res0 = bin_encoding_info_->AddFormat(kFormat0, kFormatWidth32);
   EXPECT_TRUE(res0.status().ok());
-  auto *format = res0.value();
+  auto* format = res0.value();
   EXPECT_EQ(format->name(), kFormat0);
   EXPECT_EQ(format->declared_width(), kFormatWidth32);
 
   // Make sure we get the format back when calling GetFormat.
-  auto *get_format = bin_encoding_info_->GetFormat(kFormat0);
+  auto* get_format = bin_encoding_info_->GetFormat(kFormat0);
   EXPECT_EQ(get_format, format);
   // Adding the same format again should fail.
   res0 = bin_encoding_info_->AddFormat(kFormat0, kFormatWidth32);
@@ -102,7 +102,7 @@
   EXPECT_EQ(absl::StatusCode::kAlreadyExists, res2.status().code());
 
   // Format map. Verify that the formats are in the map.
-  auto &format_map = bin_encoding_info_->format_map();
+  auto& format_map = bin_encoding_info_->format_map();
   EXPECT_EQ(format_map.size(), 3);
   EXPECT_NE(format_map.find(kFormat0), format_map.end());
   EXPECT_NE(format_map.find(kFormat1), format_map.end());
@@ -117,7 +117,7 @@
   auto res = bin_encoding_info_->AddInstructionGroup(kGroup0, kFormatWidth32,
                                                      kFormat0);
   EXPECT_TRUE(res.status().ok());
-  auto *instruction_group = res.value();
+  auto* instruction_group = res.value();
   EXPECT_EQ(instruction_group->name(), kGroup0);
   EXPECT_EQ(instruction_group->width(), kFormatWidth32);
   EXPECT_EQ(instruction_group->format_name(), kFormat0);
@@ -132,7 +132,7 @@
 // Bin decoder.
 TEST_F(BinEncodingInfoTest, AddDecoder) {
   // Add BinDecoder.
-  auto *bin_dec = bin_encoding_info_->AddBinDecoder(kBinDecoder);
+  auto* bin_dec = bin_encoding_info_->AddBinDecoder(kBinDecoder);
   EXPECT_NE(bin_dec, nullptr);
   EXPECT_FALSE(error_listener_->HasError());
   // Try adding it again.
diff --git a/mpact/sim/decoder/test/bin_format_visitor_test.cc b/mpact/sim/decoder/test/bin_format_visitor_test.cc
index 4080b13..b1da3ed 100644
--- a/mpact/sim/decoder/test/bin_format_visitor_test.cc
+++ b/mpact/sim/decoder/test/bin_format_visitor_test.cc
@@ -96,7 +96,7 @@
 
 std::string OutputDir() { return "./"; }
 
-static bool FileExists(const std::string &name) {
+static bool FileExists(const std::string& name) {
   std::ifstream file(name);
   return file.good();
 }
@@ -591,7 +591,7 @@
   // Verify that decoder entries use the different constraint types.
   std::string decoder_str((std::istreambuf_iterator<char>(decoder_file)),
                           (std::istreambuf_iterator<char>()));
-  for (auto const &fragment :
+  for (auto const& fragment :
        {"field1_value != 0x1", "field2_value > 0x2", "field3_value >= 0x3",
         "field4_value < 0x4", "field5_value <= 0x5"}) {
     RE2 re(fragment);
diff --git a/mpact/sim/decoder/test/bundle_test.cc b/mpact/sim/decoder/test/bundle_test.cc
index 6a9123c..723ace5 100644
--- a/mpact/sim/decoder/test/bundle_test.cc
+++ b/mpact/sim/decoder/test/bundle_test.cc
@@ -34,12 +34,12 @@
 constexpr char kSubBundleName0[] = "TestSubBundle0";
 constexpr char kSubBundleName1[] = "TestSubBundle1";
 constexpr char kSubBundleName2[] = "TestSubBundle2";
-const char *kSubBundleNames[3] = {kSubBundleName0, kSubBundleName1,
+const char* kSubBundleNames[3] = {kSubBundleName0, kSubBundleName1,
                                   kSubBundleName2};
 constexpr char kSlotName0[] = "TestSlot0";
 constexpr char kSlotName1[] = "TestSlot1";
 constexpr char kSlotName2[] = "TestSlot2";
-const char *kSlotNames[3] = {kSlotName0, kSlotName1, kSlotName2};
+const char* kSlotNames[3] = {kSlotName0, kSlotName1, kSlotName2};
 
 class BundleTest : public testing::Test {
  protected:
diff --git a/mpact/sim/decoder/test/extract_bits_test.cc b/mpact/sim/decoder/test/extract_bits_test.cc
index 2e5beaa..d26f6a9 100644
--- a/mpact/sim/decoder/test/extract_bits_test.cc
+++ b/mpact/sim/decoder/test/extract_bits_test.cc
@@ -16,7 +16,7 @@
 #include <ios>
 
 #include "absl/numeric/bits.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 
 namespace {
@@ -26,7 +26,7 @@
 // out to a source file as part of a code generator, so it is not included.
 
 template <typename T>
-static inline T ExtractBits(const uint8_t *data, int data_size, int msb,
+static inline T ExtractBits(const uint8_t* data, int data_size, int msb,
                             int width) {
   if (width == 0) return 0;
 
diff --git a/mpact/sim/decoder/test/format_test.cc b/mpact/sim/decoder/test/format_test.cc
index cfb322d..986e258 100644
--- a/mpact/sim/decoder/test/format_test.cc
+++ b/mpact/sim/decoder/test/format_test.cc
@@ -15,7 +15,7 @@
 #include "mpact/sim/decoder/format.h"
 
 #include "absl/status/status.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/decoder/bin_encoding_info.h"
 #include "mpact/sim/decoder/decoder_error_listener.h"
@@ -52,12 +52,12 @@
     delete encoding_info_;
   }
 
-  DecoderErrorListener *error_listener_;
-  BinEncodingInfo *encoding_info_;
+  DecoderErrorListener* error_listener_;
+  BinEncodingInfo* encoding_info_;
 };
 
 TEST_F(FormatTest, Constructor) {
-  auto *format = new Format("format_name", 16, encoding_info_);
+  auto* format = new Format("format_name", 16, encoding_info_);
   EXPECT_EQ(format->name(), "format_name");
   EXPECT_EQ(format->declared_width(), 16);
   EXPECT_EQ(format->computed_width(), 0);
@@ -77,7 +77,7 @@
 }
 
 TEST_F(FormatTest, AddFields) {
-  auto *format = new Format("format", 16, encoding_info_);
+  auto* format = new Format("format", 16, encoding_info_);
   ASSERT_TRUE(format->AddField("func3", /*is_signed=*/false, 3).ok());
   ASSERT_TRUE(format->AddField("imm3", /*is_signed=*/false, 3).ok());
   ASSERT_TRUE(format->AddField("rs1p", /*is_signed=*/false, 3).ok());
@@ -86,8 +86,8 @@
   ASSERT_TRUE(format->AddField("op", /*is_signed=*/false, 2).ok());
   ASSERT_TRUE(format->ComputeAndCheckFormatWidth().ok());
   EXPECT_EQ(format->declared_width(), format->computed_width());
-  for (auto &name : {"func3", "imm3", "rs1p", "imm2", "rdp", "op"}) {
-    auto *field = format->GetField(name);
+  for (auto& name : {"func3", "imm3", "rs1p", "imm2", "rdp", "op"}) {
+    auto* field = format->GetField(name);
     ASSERT_NE(field, nullptr);
     EXPECT_EQ(field->name, name);
   }
@@ -96,7 +96,7 @@
 }
 
 TEST_F(FormatTest, AddOverlay) {
-  auto *format = new Format("format", 16, encoding_info_);
+  auto* format = new Format("format", 16, encoding_info_);
   ASSERT_TRUE(format->AddField("func3", /*is_signed=*/false, 3).ok());
   ASSERT_TRUE(format->AddField("imm3", /*is_signed=*/false, 3).ok());
   ASSERT_TRUE(format->AddField("rs1p", /*is_signed=*/false, 3).ok());
diff --git a/mpact/sim/decoder/test/instruction_encoding_test.cc b/mpact/sim/decoder/test/instruction_encoding_test.cc
index 21e1a59..42d935c 100644
--- a/mpact/sim/decoder/test/instruction_encoding_test.cc
+++ b/mpact/sim/decoder/test/instruction_encoding_test.cc
@@ -17,7 +17,7 @@
 #include <string>
 
 #include "absl/status/status.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/decoder/bin_encoding_info.h"
 #include "mpact/sim/decoder/bin_format_visitor.h"
@@ -52,7 +52,7 @@
     (void)i_type_fmt_->AddField("rd", /*is_signed*/ false, 5);
     (void)i_type_fmt_->AddField("opcode", /*is_signed*/ false, 7);
     (void)i_type_fmt_->AddFieldOverlay("uspecial", /*is_signed*/ false, 10);
-    auto *overlay = i_type_fmt_->GetOverlay("uspecial");
+    auto* overlay = i_type_fmt_->GetOverlay("uspecial");
     (void)overlay->AddFieldReference("rs1");
     (void)overlay->AddFieldReference("rd");
     (void)i_type_fmt_->AddFieldOverlay("sspecial", /*is_signed*/ true, 10);
@@ -75,10 +75,10 @@
     delete i_type_;
   }
 
-  DecoderErrorListener *error_listener_;
-  BinEncodingInfo *encoding_info_;
-  Format *i_type_fmt_;
-  InstructionEncoding *i_type_;
+  DecoderErrorListener* error_listener_;
+  BinEncodingInfo* encoding_info_;
+  Format* i_type_fmt_;
+  InstructionEncoding* i_type_;
 };
 
 TEST_F(InstructionEncodingTest, Basic) {
@@ -191,7 +191,7 @@
   EXPECT_EQ(i_type_->GetMask(), kFunc3Mask);
   EXPECT_EQ(i_type_->GetCombinedMask(), kFunc3Mask);
   EXPECT_EQ(i_type_->equal_constraints().size(), 1);
-  auto *constraint = i_type_->equal_constraints()[0];
+  auto* constraint = i_type_->equal_constraints()[0];
   EXPECT_EQ(constraint->type, ConstraintType::kEq);
   EXPECT_EQ(constraint->field, i_type_fmt_->GetField("func3"));
   EXPECT_EQ(constraint->value, kFunc3Value);
@@ -210,7 +210,7 @@
   EXPECT_EQ(i_type_->GetMask(), 0);
   EXPECT_EQ(i_type_->GetCombinedMask(), 0);
   EXPECT_EQ(i_type_->equal_extracted_constraints().size(), 1);
-  auto *constraint = i_type_->equal_extracted_constraints()[0];
+  auto* constraint = i_type_->equal_extracted_constraints()[0];
   EXPECT_EQ(constraint->type, ConstraintType::kEq);
   EXPECT_EQ(constraint->field, i_type_fmt_->GetField("extract"));
   EXPECT_EQ(constraint->value, 0b11011'11'00100);
@@ -226,7 +226,7 @@
   EXPECT_EQ(i_type_->GetMask(), 0);
   EXPECT_EQ(i_type_->GetCombinedMask(), kFunc3Mask);
   EXPECT_EQ(i_type_->other_constraints().size(), 1);
-  auto *constraint = i_type_->other_constraints()[0];
+  auto* constraint = i_type_->other_constraints()[0];
   EXPECT_EQ(constraint->type, ConstraintType::kGe);
   EXPECT_EQ(constraint->field, i_type_fmt_->GetField("func3"));
   EXPECT_EQ(constraint->value, kFunc3Value);
diff --git a/mpact/sim/decoder/test/instruction_set_test.cc b/mpact/sim/decoder/test/instruction_set_test.cc
index 1d70b48..4df5175 100644
--- a/mpact/sim/decoder/test/instruction_set_test.cc
+++ b/mpact/sim/decoder/test/instruction_set_test.cc
@@ -45,7 +45,7 @@
 TEST_F(InstructionSetTest, Basic) {
   EXPECT_STREQ(instruction_set_->name().c_str(), kInstructionSetName);
   EXPECT_EQ(nullptr, instruction_set_->bundle());
-  Bundle *bundle = new Bundle(kBundleName, instruction_set_.get(), nullptr);
+  Bundle* bundle = new Bundle(kBundleName, instruction_set_.get(), nullptr);
   instruction_set_->set_bundle(bundle);
   EXPECT_EQ(instruction_set_->bundle(), bundle);
 }
@@ -54,7 +54,7 @@
 // name.
 TEST_F(InstructionSetTest, SingleBundle) {
   EXPECT_EQ(nullptr, instruction_set_->GetBundle(kBundleName));
-  Bundle *bundle = new Bundle(kBundleName, instruction_set_.get(), nullptr);
+  Bundle* bundle = new Bundle(kBundleName, instruction_set_.get(), nullptr);
   instruction_set_->AddBundle(bundle);
   EXPECT_EQ(bundle, instruction_set_->GetBundle(kBundleName));
   EXPECT_EQ(nullptr, instruction_set_->GetBundle(kSlotName));
@@ -65,7 +65,7 @@
 // name.
 TEST_F(InstructionSetTest, SingleSlot) {
   EXPECT_EQ(nullptr, instruction_set_->GetSlot(kSlotName));
-  Slot *slot = new Slot(kSlotName, instruction_set_.get(),
+  Slot* slot = new Slot(kSlotName, instruction_set_.get(),
                         /* is_templated */ false, nullptr);
   instruction_set_->AddSlot(slot);
   EXPECT_EQ(slot, instruction_set_->GetSlot(kSlotName));
diff --git a/mpact/sim/decoder/test/instruction_set_visitor_test.cc b/mpact/sim/decoder/test/instruction_set_visitor_test.cc
index 6e0342f..d7c338d 100644
--- a/mpact/sim/decoder/test/instruction_set_visitor_test.cc
+++ b/mpact/sim/decoder/test/instruction_set_visitor_test.cc
@@ -83,7 +83,7 @@
 
 std::string OutputDir() { return "./"; }
 
-static bool FileExists(const std::string &name) {
+static bool FileExists(const std::string& name) {
   std::ifstream file(name);
   return file.good();
 }
@@ -576,7 +576,7 @@
   std::string opcodes;
   RE2 opcodes_re("(?msU:\\s*OpcodeEnum[\\s\\n]*\\{([^\\}]*)\\})");
   EXPECT_TRUE(RE2::PartialMatch(enum_str, opcodes_re, &opcodes));
-  for (auto &name : {"kInst0", "kInst1"}) {
+  for (auto& name : {"kInst0", "kInst1"}) {
     RE2 re(name);
     EXPECT_TRUE(RE2::PartialMatch(opcodes, re)) << name;
     EXPECT_TRUE(RE2::PartialMatch(decoder_str, re)) << name;
diff --git a/mpact/sim/decoder/test/log_sink.h b/mpact/sim/decoder/test/log_sink.h
index c148dce..0fabecc 100644
--- a/mpact/sim/decoder/test/log_sink.h
+++ b/mpact/sim/decoder/test/log_sink.h
@@ -18,7 +18,7 @@
   LogSink() = default;
   ~LogSink() override = default;
   // Method called for each log message.
-  void Send(const absl::LogEntry &entry) override {
+  void Send(const absl::LogEntry& entry) override {
     switch (entry.log_severity()) {
       case absl::LogSeverity::kInfo:
         absl::StrAppend(&info_log_, entry.text_message());
diff --git a/mpact/sim/decoder/test/opcode_test.cc b/mpact/sim/decoder/test/opcode_test.cc
index 8dba3f0..d8884e0 100644
--- a/mpact/sim/decoder/test/opcode_test.cc
+++ b/mpact/sim/decoder/test/opcode_test.cc
@@ -36,7 +36,7 @@
 constexpr char kOpcodeName2[] = "opcode_2";
 constexpr char kPredicateOpName[] = "pred";
 
-const char *kOpcodeNames[] = {kOpcodeName0, kOpcodeName1, kOpcodeName2};
+const char* kOpcodeNames[] = {kOpcodeName0, kOpcodeName1, kOpcodeName2};
 
 // Test fixture for opcode test.
 class OpcodeTest : public testing::Test {
@@ -44,7 +44,7 @@
   OpcodeTest() {
     instruction_set_ = std::make_unique<InstructionSet>(kInstructionSetName);
 
-    absl::StatusOr<Opcode *> result =
+    absl::StatusOr<Opcode*> result =
         instruction_set_->opcode_factory()->CreateOpcode(kOpcodeName0);
     opcode_ = result.ok() ? result.value() : nullptr;
   }
@@ -52,7 +52,7 @@
   ~OpcodeTest() override { delete opcode_; }
 
   std::unique_ptr<InstructionSet> instruction_set_;
-  Opcode *opcode_;  // Does not have to be deleted, as OpcodeFactory handles it.
+  Opcode* opcode_;  // Does not have to be deleted, as OpcodeFactory handles it.
 };
 
 TEST_F(OpcodeTest, Basic) {
@@ -66,7 +66,7 @@
 // Verify that values of opcodes increment as you create new ones.
 TEST_F(OpcodeTest, Multiple) {
   // Creating a duplicate opcode should fail.
-  absl::StatusOr<Opcode *> result =
+  absl::StatusOr<Opcode*> result =
       instruction_set_->opcode_factory()->CreateOpcode(kOpcodeNames[0]);
   EXPECT_TRUE(absl::IsInternal(result.status()));
   for (int indx = 1; indx < 3; indx++) {
@@ -74,7 +74,7 @@
         instruction_set_->opcode_factory()->CreateOpcode(kOpcodeNames[indx]);
     // Since one opcode is created in fixture, these opcode values start at 2.
     ASSERT_TRUE(result.ok());
-    Opcode *opcode = result.value();
+    Opcode* opcode = result.value();
     EXPECT_EQ(opcode->value(), indx + 1);
     delete opcode;
   }
diff --git a/mpact/sim/decoder/test/overlay_test.cc b/mpact/sim/decoder/test/overlay_test.cc
index 565307f..ec19de8 100644
--- a/mpact/sim/decoder/test/overlay_test.cc
+++ b/mpact/sim/decoder/test/overlay_test.cc
@@ -70,12 +70,12 @@
 
   ~OverlayTest() override { delete format_; }
 
-  Format *format_;
+  Format* format_;
 };
 
 // Test construction and initial state of an overlay.
 TEST_F(OverlayTest, Constructor) {
-  auto *overlay =
+  auto* overlay =
       new Overlay(kOverlayName, /*is_signed=*/false, kOverlayWidth, format_);
   EXPECT_EQ(overlay->name(), kOverlayName);
   EXPECT_FALSE(overlay->is_signed());
@@ -89,7 +89,7 @@
 
 // Add a full field reference.
 TEST_F(OverlayTest, AddFieldReference) {
-  auto *overlay =
+  auto* overlay =
       new Overlay(kOverlayName, /*is_signed=*/false, kOverlayWidth, format_);
   // Fail to add a reference to an unknown field.
   EXPECT_EQ(overlay->AddFieldReference("immXYZ").code(),
@@ -105,7 +105,7 @@
 
 // Add a field range reference.
 TEST_F(OverlayTest, AddFieldRangeReference) {
-  auto *overlay =
+  auto* overlay =
       new Overlay(kOverlayName, /*is_signed=*/false, kOverlayWidth, format_);
   // Fail to add a reference to an unknown field.
   EXPECT_EQ(
@@ -143,7 +143,7 @@
 
 // Add a format range reference.
 TEST_F(OverlayTest, AddFormatReference) {
-  auto *overlay =
+  auto* overlay =
       new Overlay(kOverlayName, /*is_signed=*/false, kOverlayWidth, format_);
   // Fail to add a reference to an unknown field.
   EXPECT_EQ(overlay->AddFormatReference(std::vector<BitRange>{BitRange{18, 16}})
@@ -169,7 +169,7 @@
 
 // Add a bit constant.
 TEST_F(OverlayTest, AddBitConstant) {
-  auto *overlay =
+  auto* overlay =
       new Overlay(kOverlayName, /*is_signed=*/false, kOverlayWidth, format_);
   overlay->AddBitConstant(BinaryNum{0b00, 2});
   ASSERT_TRUE(overlay->ComputeHighLow().ok());
@@ -182,7 +182,7 @@
 
 // Full overlay test with value extraction.
 TEST_F(OverlayTest, FullOverlay) {
-  auto *overlay =
+  auto* overlay =
       new Overlay(kOverlayName, /*is_signed=*/false, kOverlayWidth, format_);
   ASSERT_TRUE(
       overlay
@@ -210,7 +210,7 @@
 
 // Extraction code.
 TEST_F(OverlayTest, WriteSimpleExtractor) {
-  auto *overlay =
+  auto* overlay =
       new Overlay(kOverlayName, /*is_signed=*/false, kOverlayWidth, format_);
   ASSERT_TRUE(
       overlay
@@ -236,7 +236,7 @@
 }
 
 TEST_F(OverlayTest, WriteComplexExtractor) {
-  auto *overlay =
+  auto* overlay =
       new Overlay(kOverlayName, /*is_signed=*/false, kOverlayWidth, format_);
   overlay->AddBitConstant(BinaryNum{0b11, 2});
   ASSERT_TRUE(
diff --git a/mpact/sim/decoder/test/proto_constraint_expression_test.cc b/mpact/sim/decoder/test/proto_constraint_expression_test.cc
index f6454ed..65b7951 100644
--- a/mpact/sim/decoder/test/proto_constraint_expression_test.cc
+++ b/mpact/sim/decoder/test/proto_constraint_expression_test.cc
@@ -31,8 +31,8 @@
     : public google::protobuf::compiler::MultiFileErrorCollector {
  public:
   MultiFileErrorCollector() {}
-  MultiFileErrorCollector(const MultiFileErrorCollector &) = delete;
-  MultiFileErrorCollector &operator=(const MultiFileErrorCollector &) = delete;
+  MultiFileErrorCollector(const MultiFileErrorCollector&) = delete;
+  MultiFileErrorCollector& operator=(const MultiFileErrorCollector&) = delete;
 
   void RecordError(absl::string_view filename, int line, int column,
                    absl::string_view message) override {
@@ -41,7 +41,7 @@
     absl::StrAppend(&error_, "Line ", line, " Column ", column, ": ", message,
                     "\n");
   }
-  const std::string &GetError() const { return error_; }
+  const std::string& GetError() const { return error_; }
 
  private:
   std::string error_;
@@ -79,12 +79,12 @@
   google::protobuf::compiler::DiskSourceTree source_tree;
   source_tree.MapPath("", "");
   google::protobuf::compiler::Importer importer(&source_tree, &error_collector);
-  auto const *isa_descriptor = importer.Import(kIsaProto);
+  auto const* isa_descriptor = importer.Import(kIsaProto);
   CHECK_NE(isa_descriptor, nullptr);
-  auto const *pool = importer.pool();
+  auto const* pool = importer.pool();
   CHECK_NE(pool, nullptr);
   // Get the enum value descriptor.
-  auto const *enum_value_desc =
+  auto const* enum_value_desc =
       pool->FindEnumValueByName("mpact_sim.decoder.test.OPCODE_ADD");
   CHECK_NE(enum_value_desc, nullptr);
   int enum_value = enum_value_desc->number();
@@ -100,7 +100,7 @@
   // Verify that the type is as expected.
   EXPECT_EQ(expr_value.index(), *ProtoValueIndex::kInt32);
   // Get the typed value.
-  auto const *value = std::get_if<int32_t>(&expr_value);
+  auto const* value = std::get_if<int32_t>(&expr_value);
   CHECK_NE(value, nullptr);
   // Match the value against that obtained from the enum value descriptor.
   EXPECT_EQ(*value, enum_value);
@@ -159,7 +159,7 @@
 // Test the negate expression.
 TEST_F(ProtoConstraintExpressionTest, NegateExpression) {
   // int32_t
-  auto *val_expr =
+  auto* val_expr =
       new ProtoConstraintValueExpression(ProtoValue(static_cast<int32_t>(-1)));
   ProtoConstraintNegateExpression neg_expr(val_expr);
   EXPECT_EQ(CppType<int32_t>::value, neg_expr.cpp_type());
@@ -194,7 +194,7 @@
 
 TEST_F(ProtoConstraintExpressionTest, CloneValueExpr) {
   ProtoConstraintValueExpression expr(ProtoValue(static_cast<int32_t>(-1)));
-  auto *clone = expr.Clone();
+  auto* clone = expr.Clone();
   EXPECT_NE(clone, nullptr);
   EXPECT_EQ(clone->cpp_type(), expr.cpp_type());
   EXPECT_EQ(clone->GetValueAs<int32_t>(), -1);
@@ -207,18 +207,18 @@
   google::protobuf::compiler::DiskSourceTree source_tree;
   source_tree.MapPath("", "");
   google::protobuf::compiler::Importer importer(&source_tree, &error_collector);
-  auto const *isa_descriptor = importer.Import(kIsaProto);
+  auto const* isa_descriptor = importer.Import(kIsaProto);
   CHECK_NE(isa_descriptor, nullptr);
-  auto const *pool = importer.pool();
+  auto const* pool = importer.pool();
   CHECK_NE(pool, nullptr);
   // Get the enum value descriptor.
-  auto const *enum_value_desc =
+  auto const* enum_value_desc =
       pool->FindEnumValueByName("mpact_sim.decoder.test.OPCODE_ADD");
   CHECK_NE(enum_value_desc, nullptr);
   int enum_value = enum_value_desc->number();
   // Create a constraint enum expression using the enum value descriptor.
   ProtoConstraintEnumExpression enum_expr(enum_value_desc);
-  auto *clone = enum_expr.Clone();
+  auto* clone = enum_expr.Clone();
   EXPECT_NE(clone, nullptr);
   EXPECT_EQ(clone->cpp_type(), enum_expr.cpp_type());
   EXPECT_EQ(clone->GetValueAs<int32_t>(), enum_value);
@@ -227,10 +227,10 @@
 
 TEST_F(ProtoConstraintExpressionTest, CloneNegateExpr) {
   // int32_t
-  auto *val_expr =
+  auto* val_expr =
       new ProtoConstraintValueExpression(ProtoValue(static_cast<int32_t>(-1)));
   ProtoConstraintNegateExpression neg_expr(val_expr);
-  auto *clone = neg_expr.Clone();
+  auto* clone = neg_expr.Clone();
   EXPECT_NE(clone, nullptr);
   EXPECT_EQ(clone->cpp_type(), neg_expr.cpp_type());
   EXPECT_EQ(clone->GetValueAs<int32_t>(), neg_expr.GetValueAs<int32_t>());
diff --git a/mpact/sim/decoder/test/proto_format_visitor_test.cc b/mpact/sim/decoder/test/proto_format_visitor_test.cc
index 03ced68..3cd40f0 100644
--- a/mpact/sim/decoder/test/proto_format_visitor_test.cc
+++ b/mpact/sim/decoder/test/proto_format_visitor_test.cc
@@ -42,7 +42,7 @@
 // The depot path to the test directory.
 constexpr char kDepotPath[] = "mpact/sim/decoder/test";
 
-static bool FileExists(const std::string &name) {
+static bool FileExists(const std::string& name) {
   std::ifstream file(name);
   return file.good();
 }
diff --git a/mpact/sim/decoder/test/push_pop.cc b/mpact/sim/decoder/test/push_pop.cc
index b7ac9f7..824779c 100644
--- a/mpact/sim/decoder/test/push_pop.cc
+++ b/mpact/sim/decoder/test/push_pop.cc
@@ -23,9 +23,9 @@
 
 using ::mpact::sim::generic::Instruction;
 
-void Illegal(const Instruction *inst) { /*empty*/ }
-void Push(const Instruction *inst) { /*empty*/ }
-void Pop(const Instruction *inst) { /*empty*/ }
+void Illegal(const Instruction* inst) { /*empty*/ }
+void Push(const Instruction* inst) { /*empty*/ }
+void Pop(const Instruction* inst) { /*empty*/ }
 
 }  // namespace test
 }  // namespace decoder
diff --git a/mpact/sim/decoder/test/push_pop.h b/mpact/sim/decoder/test/push_pop.h
index 01523d1..0bd48b5 100644
--- a/mpact/sim/decoder/test/push_pop.h
+++ b/mpact/sim/decoder/test/push_pop.h
@@ -24,9 +24,9 @@
 
 using ::mpact::sim::generic::Instruction;
 
-void Illegal(const Instruction *inst);
-void Push(const Instruction *inst);
-void Pop(const Instruction *inst);
+void Illegal(const Instruction* inst);
+void Push(const Instruction* inst);
+void Pop(const Instruction* inst);
 
 }  // namespace test
 }  // namespace decoder
diff --git a/mpact/sim/decoder/test/push_pop_decoder.cc b/mpact/sim/decoder/test/push_pop_decoder.cc
index d2b3596..356d61c 100644
--- a/mpact/sim/decoder/test/push_pop_decoder.cc
+++ b/mpact/sim/decoder/test/push_pop_decoder.cc
@@ -29,7 +29,7 @@
 using ::mpact::sim::generic::Instruction;
 using ::mpact::sim::util::MemoryInterface;
 
-PushPopDecoder::PushPopDecoder(ArchState *state, MemoryInterface *memory)
+PushPopDecoder::PushPopDecoder(ArchState* state, MemoryInterface* memory)
     : state_(state), memory_(memory) {
   push_pop_isa_factory_ = new PushPopIsaFactory();
   push_pop_isa_ = new PushPopInstInstructionSet(state, push_pop_isa_factory_);
@@ -44,11 +44,11 @@
   delete push_pop_isa_factory_;
 }
 
-Instruction *PushPopDecoder::DecodeInstruction(uint64_t address) {
+Instruction* PushPopDecoder::DecodeInstruction(uint64_t address) {
   memory_->Load(address, inst_db_, nullptr, nullptr);
   uint16_t iword = inst_db_->Get<uint16_t>(0);
   push_pop_encoding_->ParseInstruction(iword);
-  auto *instruction = push_pop_isa_->Decode(address, push_pop_encoding_);
+  auto* instruction = push_pop_isa_->Decode(address, push_pop_encoding_);
   instruction->set_opcode(
       *push_pop_encoding_->GetOpcode(SlotEnum::kPushPopInst, 0));
   return instruction;
diff --git a/mpact/sim/decoder/test/push_pop_decoder.h b/mpact/sim/decoder/test/push_pop_decoder.h
index 821d362..ca0c2f1 100644
--- a/mpact/sim/decoder/test/push_pop_decoder.h
+++ b/mpact/sim/decoder/test/push_pop_decoder.h
@@ -40,32 +40,32 @@
 class PushPopIsaFactory : public PushPopInstInstructionSetFactory {
  public:
   std::unique_ptr<PushPopInstSlot> CreatePushPopInstSlot(
-      ArchState *state) override {
+      ArchState* state) override {
     return std::make_unique<PushPopInstSlot>(state);
   }
 };
 
 class PushPopDecoder : public generic::DecoderInterface {
  public:
-  PushPopDecoder(ArchState *state, MemoryInterface *memory);
+  PushPopDecoder(ArchState* state, MemoryInterface* memory);
   PushPopDecoder() = delete;
   ~PushPopDecoder() override;
 
-  generic::Instruction *DecodeInstruction(uint64_t address) override;
+  generic::Instruction* DecodeInstruction(uint64_t address) override;
   int GetNumOpcodes() const override { return *OpcodeEnum::kPastMaxValue; }
-  const char *GetOpcodeName(int index) const override {
+  const char* GetOpcodeName(int index) const override {
     return kOpcodeNames[index];
   }
 
-  PushPopEncoding *push_pop_encoding() const { return push_pop_encoding_; }
+  PushPopEncoding* push_pop_encoding() const { return push_pop_encoding_; }
 
  private:
-  ArchState *state_;
-  MemoryInterface *memory_;
-  PushPopEncoding *push_pop_encoding_;
-  PushPopIsaFactory *push_pop_isa_factory_;
-  PushPopInstInstructionSet *push_pop_isa_;
-  DataBuffer *inst_db_;
+  ArchState* state_;
+  MemoryInterface* memory_;
+  PushPopEncoding* push_pop_encoding_;
+  PushPopIsaFactory* push_pop_isa_factory_;
+  PushPopInstInstructionSet* push_pop_isa_;
+  DataBuffer* inst_db_;
 };
 
 }  // namespace mpact::sim::decoder::test
diff --git a/mpact/sim/decoder/test/push_pop_encoding.cc b/mpact/sim/decoder/test/push_pop_encoding.cc
index 142df85..eb58b2c 100644
--- a/mpact/sim/decoder/test/push_pop_encoding.cc
+++ b/mpact/sim/decoder/test/push_pop_encoding.cc
@@ -37,69 +37,69 @@
 using TestRegister = ::mpact::sim::generic::Register<uint32_t>;
 
 template <typename RegType>
-inline RegType *GetRegister(ArchState *state, std::string name) {
+inline RegType* GetRegister(ArchState* state, std::string name) {
   auto iter = state->registers()->find(name);
   if (iter == state->registers()->end()) {
     return nullptr;
   }
-  return static_cast<RegType *>(iter->second);
+  return static_cast<RegType*>(iter->second);
 }
 
 // Generic helper functions to create register operands.
 template <typename RegType>
-inline DestinationOperandInterface *GetRegisterDestinationOp(ArchState *state,
+inline DestinationOperandInterface* GetRegisterDestinationOp(ArchState* state,
                                                              std::string name,
                                                              int latency) {
-  auto *reg = GetRegister<RegType>(state, name);
+  auto* reg = GetRegister<RegType>(state, name);
   return reg->CreateDestinationOperand(latency);
 }
 
 template <typename RegType>
-inline DestinationOperandInterface *GetRegisterDestinationOp(
-    ArchState *state, std::string name, int latency, std::string op_name) {
-  auto *reg = GetRegister<RegType>(state, name);
+inline DestinationOperandInterface* GetRegisterDestinationOp(
+    ArchState* state, std::string name, int latency, std::string op_name) {
+  auto* reg = GetRegister<RegType>(state, name);
   return reg->CreateDestinationOperand(latency, op_name);
 }
 
 template <typename RegType>
-inline SourceOperandInterface *GetRegisterSourceOp(ArchState *state,
+inline SourceOperandInterface* GetRegisterSourceOp(ArchState* state,
                                                    std::string name) {
-  auto *reg = GetRegister<RegType>(state, name);
-  auto *op = reg->CreateSourceOperand();
+  auto* reg = GetRegister<RegType>(state, name);
+  auto* op = reg->CreateSourceOperand();
   return op;
 }
 
 template <typename RegType>
-inline SourceOperandInterface *GetRegisterSourceOp(ArchState *state,
+inline SourceOperandInterface* GetRegisterSourceOp(ArchState* state,
                                                    std::string name,
                                                    std::string op_name) {
-  auto *reg = GetRegister<RegType>(state, name);
-  auto *op = reg->CreateSourceOperand(op_name);
+  auto* reg = GetRegister<RegType>(state, name);
+  auto* op = reg->CreateSourceOperand(op_name);
   return op;
 }
 
-PushPopEncoding::PushPopEncoding(ArchState *state) : state_(state) {
+PushPopEncoding::PushPopEncoding(ArchState* state) : state_(state) {
   source_op_getters_.insert(std::make_pair(
-      *SourceOpEnum::kRlist, [this]() -> SourceOperandInterface * {
+      *SourceOpEnum::kRlist, [this]() -> SourceOperandInterface* {
         return new generic::ImmediateOperand<uint32_t>(
             p_type::ExtractRlist(inst_word_));
       }));
 
   source_op_getters_.insert(std::make_pair(
-      *SourceOpEnum::kSpimm6, [this]() -> SourceOperandInterface * {
+      *SourceOpEnum::kSpimm6, [this]() -> SourceOperandInterface* {
         return new generic::ImmediateOperand<uint32_t>(
             p_type::ExtractSpimm6(inst_word_));
       }));
 
   source_op_getters_.insert(
-      std::make_pair(*SourceOpEnum::kX2, [this]() -> SourceOperandInterface * {
+      std::make_pair(*SourceOpEnum::kX2, [this]() -> SourceOperandInterface* {
         return GetRegisterSourceOp<TestRegister>(state_, "x2");
       }));
 
   list_source_op_getters_.insert(std::make_pair(
       *ListSourceOpEnum::kRlist,
-      [this]() -> std::vector<SourceOperandInterface *> {
-        std::vector<SourceOperandInterface *> result;
+      [this]() -> std::vector<SourceOperandInterface*> {
+        std::vector<SourceOperandInterface*> result;
         auto rlist = p_type::ExtractRlist(inst_word_);
         // Get the value of 'rlist', and add source operands accordingly.
         if (rlist < 4) return result;
@@ -131,15 +131,15 @@
       }));
 
   dest_op_getters_.insert(std::make_pair(
-      *DestOpEnum::kX2, [this](int latency) -> DestinationOperandInterface * {
+      *DestOpEnum::kX2, [this](int latency) -> DestinationOperandInterface* {
         return GetRegisterDestinationOp<TestRegister>(state_, "x2", latency);
       }));
 
   list_dest_op_getters_.insert(
       std::make_pair(*ListDestOpEnum::kRlist,
-                     [this](const std::vector<int> &latency)
-                         -> std::vector<DestinationOperandInterface *> {
-                       std::vector<DestinationOperandInterface *> result;
+                     [this](const std::vector<int>& latency)
+                         -> std::vector<DestinationOperandInterface*> {
+                       std::vector<DestinationOperandInterface*> result;
                        // Get the value of 'rlist', and add destination operands
                        // accordingly.
                        auto rlist = p_type::ExtractRlist(inst_word_);
@@ -191,7 +191,7 @@
   opcode_ = DecodePushPop(inst_word_);
 }
 
-SourceOperandInterface *PushPopEncoding::GetSource(SlotEnum, int, OpcodeEnum,
+SourceOperandInterface* PushPopEncoding::GetSource(SlotEnum, int, OpcodeEnum,
                                                    SourceOpEnum op,
                                                    int source_no) {
   auto iter = source_op_getters_.find(*op);
@@ -201,7 +201,7 @@
   return iter->second();
 }
 
-std::vector<SourceOperandInterface *> PushPopEncoding::GetSources(
+std::vector<SourceOperandInterface*> PushPopEncoding::GetSources(
     SlotEnum, int, OpcodeEnum, ListSourceOpEnum op, int source_no) {
   auto iter = list_source_op_getters_.find(*op);
   if (iter == list_source_op_getters_.end()) {
@@ -210,7 +210,7 @@
   return iter->second();
 }
 
-DestinationOperandInterface *PushPopEncoding::GetDestination(
+DestinationOperandInterface* PushPopEncoding::GetDestination(
     SlotEnum, int, OpcodeEnum, DestOpEnum op, int dest_no, int latency) {
   auto iter = dest_op_getters_.find(*op);
   if (iter == dest_op_getters_.end()) {
@@ -219,9 +219,9 @@
   return iter->second(latency);
 }
 
-std::vector<DestinationOperandInterface *> PushPopEncoding::GetDestinations(
+std::vector<DestinationOperandInterface*> PushPopEncoding::GetDestinations(
     SlotEnum, int, OpcodeEnum, ListDestOpEnum op, int dest_no,
-    const std::vector<int> &latency) {
+    const std::vector<int>& latency) {
   auto iter = list_dest_op_getters_.find(*op);
   if (iter == list_dest_op_getters_.end()) {
     return {};
diff --git a/mpact/sim/decoder/test/push_pop_encoding.h b/mpact/sim/decoder/test/push_pop_encoding.h
index 4dec95e..02a93ce 100644
--- a/mpact/sim/decoder/test/push_pop_encoding.h
+++ b/mpact/sim/decoder/test/push_pop_encoding.h
@@ -34,7 +34,7 @@
 
 class PushPopEncoding : public PushPopInstEncodingBase {
  public:
-  explicit PushPopEncoding(ArchState *state);
+  explicit PushPopEncoding(ArchState* state);
   ~PushPopEncoding() override = default;
 
   void ParseInstruction(uint16_t inst_word);
@@ -42,34 +42,34 @@
   OpcodeEnum opcode() const { return opcode_; }
   // Return a single source operand for the given slot, entry, opcode, and
   // source operand enum.
-  SourceOperandInterface *GetSource(SlotEnum, int, OpcodeEnum, SourceOpEnum op,
+  SourceOperandInterface* GetSource(SlotEnum, int, OpcodeEnum, SourceOpEnum op,
                                     int source_no) override;
   // Expand the ListSourceOpEnum into a vector of source operands.
-  std::vector<SourceOperandInterface *> GetSources(SlotEnum, int, OpcodeEnum,
-                                                   ListSourceOpEnum op,
-                                                   int source_no) override;
+  std::vector<SourceOperandInterface*> GetSources(SlotEnum, int, OpcodeEnum,
+                                                  ListSourceOpEnum op,
+                                                  int source_no) override;
   // Return a single destination operand for the given slot, entry, opcode,
   // destination operand enum, and latency.
-  DestinationOperandInterface *GetDestination(SlotEnum, int, OpcodeEnum,
+  DestinationOperandInterface* GetDestination(SlotEnum, int, OpcodeEnum,
                                               DestOpEnum op, int dest_no,
                                               int latency) override;
   // Expand the ListDestOpEnum into a vector of destination operands.
-  std::vector<DestinationOperandInterface *> GetDestinations(
+  std::vector<DestinationOperandInterface*> GetDestinations(
       SlotEnum, int, OpcodeEnum, ListDestOpEnum op, int dest_no,
-      const std::vector<int> &latency) override;
+      const std::vector<int>& latency) override;
 
  private:
   using SourceOpGetterMap =
-      absl::flat_hash_map<int, absl::AnyInvocable<SourceOperandInterface *()>>;
+      absl::flat_hash_map<int, absl::AnyInvocable<SourceOperandInterface*()>>;
   using DestOpGetterMap = absl::flat_hash_map<
-      int, absl::AnyInvocable<DestinationOperandInterface *(int)>>;
+      int, absl::AnyInvocable<DestinationOperandInterface*(int)>>;
   using ListSourceOpGetterMap = absl::flat_hash_map<
-      int, absl::AnyInvocable<std::vector<SourceOperandInterface *>()>>;
+      int, absl::AnyInvocable<std::vector<SourceOperandInterface*>()>>;
   using ListDestOpGetterMap = absl::flat_hash_map<
-      int, absl::AnyInvocable<std::vector<DestinationOperandInterface *>(
-               const std::vector<int> &)>>;
+      int, absl::AnyInvocable<std::vector<DestinationOperandInterface*>(
+               const std::vector<int>&)>>;
 
-  ArchState *state_;
+  ArchState* state_;
   OpcodeEnum opcode_;
   uint16_t inst_word_;
 
diff --git a/mpact/sim/decoder/test/resource_test.cc b/mpact/sim/decoder/test/resource_test.cc
index a8c8159..efef72c 100644
--- a/mpact/sim/decoder/test/resource_test.cc
+++ b/mpact/sim/decoder/test/resource_test.cc
@@ -28,9 +28,9 @@
   EXPECT_TRUE(result.status().ok());
   auto result2 = factory_.CreateResource(kResource1Name);
   EXPECT_TRUE(absl::IsAlreadyExists(result2.status()));
-  auto *resource1 = factory_.GetOrInsertResource(kResource1Name);
+  auto* resource1 = factory_.GetOrInsertResource(kResource1Name);
   EXPECT_EQ(result.value(), resource1);
-  auto *resource2 = factory_.GetOrInsertResource(kResource2Name);
+  auto* resource2 = factory_.GetOrInsertResource(kResource2Name);
   EXPECT_NE(resource2, nullptr);
   EXPECT_NE(resource2, resource1);
   auto result3 = factory_.CreateResource(kResource2Name);
@@ -42,7 +42,7 @@
 
 // Test initial state of a new resource.
 TEST_F(ResourceTest, ResourceInitial) {
-  auto *resource = factory_.GetOrInsertResource(kResource1Name);
+  auto* resource = factory_.GetOrInsertResource(kResource1Name);
   EXPECT_TRUE(resource->is_simple());
   EXPECT_FALSE(resource->is_multi_valued());
   EXPECT_EQ(resource->name(), kResource1Name);
@@ -51,7 +51,7 @@
 
 // Test resource setters.
 TEST_F(ResourceTest, ResourceSetters) {
-  auto *resource = factory_.GetOrInsertResource(kResource1Name);
+  auto* resource = factory_.GetOrInsertResource(kResource1Name);
   resource->set_is_simple(false);
   resource->set_is_multi_valued(true);
   EXPECT_FALSE(resource->is_simple());
diff --git a/mpact/sim/decoder/test/riscv_i_instructions.h b/mpact/sim/decoder/test/riscv_i_instructions.h
index a4eaf9e..c371804 100644
--- a/mpact/sim/decoder/test/riscv_i_instructions.h
+++ b/mpact/sim/decoder/test/riscv_i_instructions.h
@@ -15,6 +15,8 @@
 #ifndef THIRD_PARTY_MPACT_RISCV_RISCV_RISCV_I_INSTRUCTIONS_H_
 #define THIRD_PARTY_MPACT_RISCV_RISCV_RISCV_I_INSTRUCTIONS_H_
 
+#include <cstdint>
+
 #include "mpact/sim/generic/instruction.h"
 
 // This file contains the declarations of the instruction semantic functions
@@ -29,51 +31,51 @@
 
 using ::mpact::sim::generic::Instruction;
 
-void RiscVIllegalInstruction(const Instruction *inst);
+void RiscVIllegalInstruction(const Instruction* inst);
 
 // No operands necessary for Nop. For now, all hint instructions should be
 // decoded as Nop.
-void RiscVINop(const Instruction *instruction);
+void RiscVINop(const Instruction* instruction);
 
 namespace RV32 {
 
 // For the following, source operand 0 refers to the register specified in rs1,
 // and source operand 1 refers to either the register specified in rs2, or the
 // immediate. Destination operand 0 refers to the register specified in rd.
-void RiscVIAdd(const Instruction *instruction);
-void RiscVISub(const Instruction *instruction);
-void RiscVISlt(const Instruction *instruction);
-void RiscVISltu(const Instruction *instruction);
-void RiscVIAnd(const Instruction *instruction);
-void RiscVIOr(const Instruction *instruction);
-void RiscVIXor(const Instruction *instruction);
-void RiscVISll(const Instruction *instruction);
-void RiscVISrl(const Instruction *instruction);
-void RiscVISra(const Instruction *instruction);
+void RiscVIAdd(const Instruction* instruction);
+void RiscVISub(const Instruction* instruction);
+void RiscVISlt(const Instruction* instruction);
+void RiscVISltu(const Instruction* instruction);
+void RiscVIAnd(const Instruction* instruction);
+void RiscVIOr(const Instruction* instruction);
+void RiscVIXor(const Instruction* instruction);
+void RiscVISll(const Instruction* instruction);
+void RiscVISrl(const Instruction* instruction);
+void RiscVISra(const Instruction* instruction);
 // For the following two semantic functions, source operand 0 refers to the
 // immediate value, and destination 0 the register specified in rd. Note, the
 // value of the immediate shall be properly shifted.
-void RiscVILui(const Instruction *instruction);
-void RiscVIAuipc(const Instruction *instruction);
+void RiscVILui(const Instruction* instruction);
+void RiscVIAuipc(const Instruction* instruction);
 // Source operand 0 contains the immediate value. Destination operand 0 refers
 // to the pc destination operand, wheras destination operand 1 refers to the
 // link register specified in rd.
-void RiscVIJal(const Instruction *instruction);
+void RiscVIJal(const Instruction* instruction);
 // Source operand 0 refers to the base registers specified by rs1, source
 // operand 1 contains the immediate value. Destination operand 0 refers to the
 // pc destination operand, wheras destination operand 1 refers to the
 // link register specified in rd.
-void RiscVIJalr(const Instruction *instruction);
+void RiscVIJalr(const Instruction* instruction);
 // For the following branch instructions. Source operand 0 refers to the
 // register specified by rs1, source operand 2 refers to the register specified
 // by rs2, and source operand 3 refers to the immediate offset. Destination
 // operand 0 refers to the pc destination operand.
-void RiscVIBeq(const Instruction *instruction);
-void RiscVIBne(const Instruction *instruction);
-void RiscVIBlt(const Instruction *instruction);
-void RiscVIBltu(const Instruction *instruction);
-void RiscVIBge(const Instruction *instruction);
-void RiscVIBgeu(const Instruction *instruction);
+void RiscVIBeq(const Instruction* instruction);
+void RiscVIBne(const Instruction* instruction);
+void RiscVIBlt(const Instruction* instruction);
+void RiscVIBltu(const Instruction* instruction);
+void RiscVIBge(const Instruction* instruction);
+void RiscVIBgeu(const Instruction* instruction);
 // Each of the load instructions are modeled by a pair of semantic instruction
 // functions. The "main" function computes the effective address and initiates
 // the load, the "child" function processes the load result and writes it back
@@ -82,24 +84,24 @@
 // source operand 1 the offset. Destination operand 0 is the register specified
 // by rd. The "child" semantic function will get a copy of the destination
 // operand.
-void RiscVILd(const Instruction *instruction);
-void RiscVILw(const Instruction *instruction);
-void RiscVILwChild(const Instruction *instruction);
-void RiscVILh(const Instruction *instruction);
-void RiscVILhChild(const Instruction *instruction);
-void RiscVILhu(const Instruction *instruction);
-void RiscVILhuChild(const Instruction *instruction);
-void RiscVILb(const Instruction *instruction);
-void RiscVILbChild(const Instruction *instruction);
-void RiscVILbu(const Instruction *instruction);
-void RiscVILbuChild(const Instruction *instruction);
+void RiscVILd(const Instruction* instruction);
+void RiscVILw(const Instruction* instruction);
+void RiscVILwChild(const Instruction* instruction);
+void RiscVILh(const Instruction* instruction);
+void RiscVILhChild(const Instruction* instruction);
+void RiscVILhu(const Instruction* instruction);
+void RiscVILhuChild(const Instruction* instruction);
+void RiscVILb(const Instruction* instruction);
+void RiscVILbChild(const Instruction* instruction);
+void RiscVILbu(const Instruction* instruction);
+void RiscVILbuChild(const Instruction* instruction);
 // For each store instruction semantic function, source operand 0 is the base
 // register, source operand 1 is the offset, while source operand 2 is the value
 // to be stored referred to by rs2.
-void RiscVISd(const Instruction *instruction);
-void RiscVISw(const Instruction *instruction);
-void RiscVISh(const Instruction *instruction);
-void RiscVISb(const Instruction *instruction);
+void RiscVISd(const Instruction* instruction);
+void RiscVISw(const Instruction* instruction);
+void RiscVISh(const Instruction* instruction);
+void RiscVISb(const Instruction* instruction);
 
 }  // namespace RV32
 
@@ -108,48 +110,48 @@
 // For the following, source operand 0 refers to the register specified in rs1,
 // and source operand 1 refers to either the register specified in rs2, or the
 // immediate. Destination operand 0 refers to the register specified in rd.
-void RiscVIAdd(const Instruction *instruction);
-void RiscVIAddw(const Instruction *instruction);
-void RiscVISub(const Instruction *instruction);
-void RiscVISubw(const Instruction *instruction);
-void RiscVISlt(const Instruction *instruction);
-void RiscVISltu(const Instruction *instruction);
-void RiscVIAnd(const Instruction *instruction);
-void RiscVIOr(const Instruction *instruction);
-void RiscVIXor(const Instruction *instruction);
-void RiscVISll(const Instruction *instruction);
-void RiscVISrl(const Instruction *instruction);
-void RiscVISra(const Instruction *instruction);
-void RiscVISllw(const Instruction *instruction);
-void RiscVISrlw(const Instruction *instruction);
-void RiscVISraw(const Instruction *instruction);
+void RiscVIAdd(const Instruction* instruction);
+void RiscVIAddw(const Instruction* instruction);
+void RiscVISub(const Instruction* instruction);
+void RiscVISubw(const Instruction* instruction);
+void RiscVISlt(const Instruction* instruction);
+void RiscVISltu(const Instruction* instruction);
+void RiscVIAnd(const Instruction* instruction);
+void RiscVIOr(const Instruction* instruction);
+void RiscVIXor(const Instruction* instruction);
+void RiscVISll(const Instruction* instruction);
+void RiscVISrl(const Instruction* instruction);
+void RiscVISra(const Instruction* instruction);
+void RiscVISllw(const Instruction* instruction);
+void RiscVISrlw(const Instruction* instruction);
+void RiscVISraw(const Instruction* instruction);
 // For the following two semantic functions, source operand 0 refers to the
 // immediate value, and destination 0 the register specified in rd. Note, the
 // value of the immediate shall be properly shifted.
-void RiscVILui(const Instruction *instruction);
-void RiscVIAuipc(const Instruction *instruction);
+void RiscVILui(const Instruction* instruction);
+void RiscVIAuipc(const Instruction* instruction);
 // No operands necessary for Nop. For now, all hint instructions should be
 // decoded as Nop.
-void RiscVINop(const Instruction *instruction);
+void RiscVINop(const Instruction* instruction);
 // Source operand 0 contains the immediate value. Destination operand 0 refers
 // to the pc destination operand, wheras destination operand 1 refers to the
 // link register specified in rd.
-void RiscVIJal(const Instruction *instruction);
+void RiscVIJal(const Instruction* instruction);
 // Source operand 0 refers to the base registers specified by rs1, source
 // operand 1 contains the immediate value. Destination operand 0 refers to the
 // pc destination operand, wheras destination operand 1 refers to the
 // link register specified in rd.
-void RiscVIJalr(const Instruction *instruction);
+void RiscVIJalr(const Instruction* instruction);
 // For the following branch instructions. Source operand 0 refers to the
 // register specified by rs1, source operand 2 refers to the register specified
 // by rs2, and source operand 3 refers to the immediate offset. Destination
 // operand 0 refers to the pc destination operand.
-void RiscVIBeq(const Instruction *instruction);
-void RiscVIBne(const Instruction *instruction);
-void RiscVIBlt(const Instruction *instruction);
-void RiscVIBltu(const Instruction *instruction);
-void RiscVIBge(const Instruction *instruction);
-void RiscVIBgeu(const Instruction *instruction);
+void RiscVIBeq(const Instruction* instruction);
+void RiscVIBne(const Instruction* instruction);
+void RiscVIBlt(const Instruction* instruction);
+void RiscVIBltu(const Instruction* instruction);
+void RiscVIBge(const Instruction* instruction);
+void RiscVIBgeu(const Instruction* instruction);
 // Each of the load instructions are modeled by a pair of semantic instruction
 // functions. The "main" function computes the effective address and initiates
 // the load, the "child" function processes the load result and writes it back
@@ -158,40 +160,40 @@
 // source operand 1 the offset. Destination operand 0 is the register specified
 // by rd. The "child" semantic function will get a copy of the destination
 // operand.
-void RiscVILd(const Instruction *instruction);
-void RiscVILdChild(const Instruction *instruction);
-void RiscVILw(const Instruction *instruction);
-void RiscVILwChild(const Instruction *instruction);
-void RiscVILwu(const Instruction *instruction);
-void RiscVILwuChild(const Instruction *instruction);
-void RiscVILh(const Instruction *instruction);
-void RiscVILhChild(const Instruction *instruction);
-void RiscVILhu(const Instruction *instruction);
-void RiscVILhuChild(const Instruction *instruction);
-void RiscVILb(const Instruction *instruction);
-void RiscVILbChild(const Instruction *instruction);
-void RiscVILbu(const Instruction *instruction);
-void RiscVILbuChild(const Instruction *instruction);
+void RiscVILd(const Instruction* instruction);
+void RiscVILdChild(const Instruction* instruction);
+void RiscVILw(const Instruction* instruction);
+void RiscVILwChild(const Instruction* instruction);
+void RiscVILwu(const Instruction* instruction);
+void RiscVILwuChild(const Instruction* instruction);
+void RiscVILh(const Instruction* instruction);
+void RiscVILhChild(const Instruction* instruction);
+void RiscVILhu(const Instruction* instruction);
+void RiscVILhuChild(const Instruction* instruction);
+void RiscVILb(const Instruction* instruction);
+void RiscVILbChild(const Instruction* instruction);
+void RiscVILbu(const Instruction* instruction);
+void RiscVILbuChild(const Instruction* instruction);
 // For each store instruction semantic function, source operand 0 is the base
 // register, source operand 1 is the offset, while source operand 2 is the value
 // to be stored referred to by rs2.
-void RiscVISd(const Instruction *instruction);
-void RiscVISw(const Instruction *instruction);
-void RiscVISh(const Instruction *instruction);
-void RiscVISb(const Instruction *instruction);
+void RiscVISd(const Instruction* instruction);
+void RiscVISw(const Instruction* instruction);
+void RiscVISh(const Instruction* instruction);
+void RiscVISb(const Instruction* instruction);
 
 }  // namespace RV64
 
 // The Fence instruction takes a single source operand (index 0) which consists
 // of an immediate value containing the right justified concatenation of the FM,
 // predecessor, and successor bit fields of the instruction.
-void RiscVIFence(const Instruction *instruction);
+void RiscVIFence(const Instruction* instruction);
 // Ecall and EBreak take no source or destination operands.
-void RiscVIEcall(const Instruction *instruction);
-void RiscVIEbreak(const Instruction *instruction);
+void RiscVIEcall(const Instruction* instruction);
+void RiscVIEbreak(const Instruction* instruction);
 // Trap doesn't implement any specific instruction, but can be called as an
 // instruction, for instance for unknown instructions.
-void RiscVITrap(bool is_interrupt, uint32_t cause, Instruction *instruction);
+void RiscVITrap(bool is_interrupt, uint32_t cause, Instruction* instruction);
 
 }  // namespace riscv
 }  // namespace sim
diff --git a/mpact/sim/decoder/test/slot_test.cc b/mpact/sim/decoder/test/slot_test.cc
index 8a4c516..4aff4f8 100644
--- a/mpact/sim/decoder/test/slot_test.cc
+++ b/mpact/sim/decoder/test/slot_test.cc
@@ -18,7 +18,7 @@
 #include <string>
 
 #include "absl/strings/str_cat.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/decoder/instruction.h"
 #include "mpact/sim/decoder/instruction_set.h"
@@ -91,7 +91,7 @@
     std::string opcode_name = absl::StrCat("opcode_", inst_indx);
     auto res = instruction_set_->opcode_factory()->CreateOpcode(opcode_name);
     ASSERT_TRUE(res.status().ok());
-    auto *inst = new Instruction(res.value(), slot_.get());
+    auto* inst = new Instruction(res.value(), slot_.get());
     EXPECT_TRUE(slot_->AppendInstruction(inst).ok());
     EXPECT_EQ(slot_->instruction_map().size(), inst_indx + 1);
     EXPECT_EQ(slot_->instruction_map().at(opcode_name), inst);
diff --git a/mpact/sim/decoder/test/template_expression_test.cc b/mpact/sim/decoder/test/template_expression_test.cc
index 64ea168..35c0173 100644
--- a/mpact/sim/decoder/test/template_expression_test.cc
+++ b/mpact/sim/decoder/test/template_expression_test.cc
@@ -19,7 +19,6 @@
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
 #include "absl/strings/str_cat.h"
-#include "absl/types/variant.h"
 #include "googletest/include/gtest/gtest.h"
 
 namespace mpact {
@@ -34,7 +33,7 @@
 constexpr int kIntConst0 = 0;
 
 static absl::StatusOr<TemplateValue> Add3TemplateFunc(
-    TemplateInstantiationArgs *args) {
+    TemplateInstantiationArgs* args) {
   if (args->size() != 1) {
     return absl::InternalError(absl::StrCat(
         "Wrong number of arguments, expected 1, was given ", args->size()));
@@ -42,7 +41,7 @@
   auto result = (*args)[0]->GetValue();
   if (!result.ok()) return result.status();
 
-  auto *value_ptr = std::get_if<int>(&result.value());
+  auto* value_ptr = std::get_if<int>(&result.value());
   if (value_ptr == nullptr) {
     return absl::InternalError("Type mismatch - int expected");
   }
@@ -57,23 +56,23 @@
   ASSERT_TRUE(result.status().ok());
   ASSERT_TRUE(five->IsConstant());
   auto template_value = result.value();
-  int *value_ptr = std::get_if<int>(&template_value);
+  int* value_ptr = std::get_if<int>(&template_value);
   EXPECT_EQ(*value_ptr, kIntConst5);
   delete five;
 }
 
 TEST(TemplateExpressionTest, Negate) {
-  auto *five = new TemplateConstant(kIntConst5);
-  auto *negate_expr = new TemplateNegate(five);
+  auto* five = new TemplateConstant(kIntConst5);
+  auto* negate_expr = new TemplateNegate(five);
   auto result = negate_expr->GetValue();
   ASSERT_TRUE(result.status().ok());
   auto template_value = result.value();
-  int *value_ptr = std::get_if<int>(&template_value);
+  int* value_ptr = std::get_if<int>(&template_value);
   EXPECT_EQ(*value_ptr, -kIntConst5);
   // Call Evaluate and check that the value is the same.
   auto eval_res = negate_expr->Evaluate(nullptr);
   EXPECT_TRUE(eval_res.status().ok());
-  auto *eval_expr = eval_res.value();
+  auto* eval_expr = eval_res.value();
   result = eval_expr->GetValue();
   ASSERT_TRUE(result.status().ok());
   template_value = result.value();
@@ -91,7 +90,7 @@
   auto result = add_expr->GetValue();
   ASSERT_TRUE(result.status().ok());
   auto template_value = result.value();
-  int *value_ptr = std::get_if<int>(&template_value);
+  int* value_ptr = std::get_if<int>(&template_value);
   EXPECT_EQ(*value_ptr, kIntConst2 + kIntConst3);
   delete add_expr;
 }
@@ -104,7 +103,7 @@
   auto result = subtract_expr->GetValue();
   ASSERT_TRUE(result.status().ok());
   auto template_value = result.value();
-  int *value_ptr = std::get_if<int>(&template_value);
+  int* value_ptr = std::get_if<int>(&template_value);
   EXPECT_EQ(*value_ptr, kIntConst2 - kIntConst3);
   delete subtract_expr;
 }
@@ -117,7 +116,7 @@
   auto result = mult_expr->GetValue();
   ASSERT_TRUE(result.status().ok());
   auto template_value = result.value();
-  int *value_ptr = std::get_if<int>(&template_value);
+  int* value_ptr = std::get_if<int>(&template_value);
   EXPECT_EQ(*value_ptr, kIntConst2 * kIntConst3);
   delete mult_expr;
 }
@@ -130,7 +129,7 @@
   auto result = div_expr->GetValue();
   ASSERT_TRUE(result.status().ok());
   auto template_value = result.value();
-  int *value_ptr = std::get_if<int>(&template_value);
+  int* value_ptr = std::get_if<int>(&template_value);
   EXPECT_EQ(*value_ptr, kIntConst5 / kIntConst2);
   delete div_expr;
 }
@@ -148,43 +147,43 @@
 }
 
 TEST(TemplateExpressionTest, TemplateFunctionAdd3) {
-  auto *two = new TemplateConstant(kIntConst2);
-  auto *args = new TemplateInstantiationArgs{two};
-  auto *func = new TemplateFunction(Add3TemplateFunc, args);
+  auto* two = new TemplateConstant(kIntConst2);
+  auto* args = new TemplateInstantiationArgs{two};
+  auto* func = new TemplateFunction(Add3TemplateFunc, args);
   EXPECT_TRUE(func->IsConstant());
   auto expr_value = func->GetValue();
   ASSERT_TRUE(expr_value.status().ok());
-  auto *value_ptr = std::get_if<int>(&expr_value.value());
+  auto* value_ptr = std::get_if<int>(&expr_value.value());
   ASSERT_NE(value_ptr, nullptr);
   EXPECT_EQ(*value_ptr, kIntConst2 + kIntConst3);
   delete func;
 }
 
 TEST(TemplateExpressionTest, TemplateFunctionAdd3Evaluate) {
-  TemplateFormal *formal_b = new TemplateFormal("b", 0);
-  auto *b_plus_two = new TemplateAdd(new TemplateParam(formal_b),
+  TemplateFormal* formal_b = new TemplateFormal("b", 0);
+  auto* b_plus_two = new TemplateAdd(new TemplateParam(formal_b),
                                      new TemplateConstant(kIntConst2));
-  auto *args = new TemplateInstantiationArgs{b_plus_two};
-  auto *func = new TemplateFunction(Add3TemplateFunc, args);
+  auto* args = new TemplateInstantiationArgs{b_plus_two};
+  auto* func = new TemplateFunction(Add3TemplateFunc, args);
   // First attempt at evaluating function should fail, due to the template
   // formal b.
   auto result = func->GetValue();
   EXPECT_FALSE(result.status().ok());
   // Create a deep copy of func.
-  auto *deep_func = func->DeepCopy();
+  auto* deep_func = func->DeepCopy();
   // Specialize based on b = 3.
-  auto *three = new TemplateConstant(kIntConst3);
+  auto* three = new TemplateConstant(kIntConst3);
   TemplateInstantiationArgs instance_b{three};
   auto eval_result = func->Evaluate(&instance_b);
   ASSERT_TRUE(eval_result.status().ok());
-  auto *eval_func = eval_result.value();
+  auto* eval_func = eval_result.value();
   // Specialize the deep copy too.
   auto deep_eval_result = deep_func->Evaluate(&instance_b);
   ASSERT_TRUE(deep_eval_result.status().ok());
-  auto *deep_eval_func = deep_eval_result.value();
+  auto* deep_eval_func = deep_eval_result.value();
   // Now get the value.
   result = eval_func->GetValue();
-  auto *value_ptr = std::get_if<int>(&result.value());
+  auto* value_ptr = std::get_if<int>(&result.value());
   ASSERT_NE(value_ptr, nullptr);
   EXPECT_EQ(*value_ptr, kIntConst2 + kIntConst3 + kIntConst3);
   // Get the value from the deep copy too.
@@ -205,16 +204,16 @@
 // template <int b> B where the expression b + 2 is used in B.
 // Compute b + 2 given instantiation argument of B<3>
 TEST(TemplateExpressionTest, TemplateParameter) {
-  auto *three = new TemplateConstant(kIntConst3);
-  TemplateFormal *formal_b = new TemplateFormal("b", 0);
-  auto *b_plus_two = new TemplateAdd(new TemplateParam(formal_b),
+  auto* three = new TemplateConstant(kIntConst3);
+  TemplateFormal* formal_b = new TemplateFormal("b", 0);
+  auto* b_plus_two = new TemplateAdd(new TemplateParam(formal_b),
                                      new TemplateConstant(kIntConst2));
   TemplateInstantiationArgs instance_b{three};
   auto result = b_plus_two->Evaluate(&instance_b);
   ASSERT_TRUE(result.status().ok());
   auto expr_value = result.value()->GetValue();
   ASSERT_TRUE(expr_value.status().ok());
-  int *value_ptr = std::get_if<int>(&expr_value.value());
+  int* value_ptr = std::get_if<int>(&expr_value.value());
   ASSERT_NE(value_ptr, nullptr);
   EXPECT_EQ(*value_ptr, kIntConst2 + kIntConst3);
   delete formal_b;
diff --git a/mpact/sim/decoder/test/testfiles/riscv32i.h b/mpact/sim/decoder/test/testfiles/riscv32i.h
index 372c7f8..20f168e 100644
--- a/mpact/sim/decoder/test/testfiles/riscv32i.h
+++ b/mpact/sim/decoder/test/testfiles/riscv32i.h
@@ -24,8 +24,8 @@
 
 using ::mpact::sim::generic::Instruction;
 
-void SomeFunction(Instruction *inst);
-void SomeOtherFunction(Instruction *inst);
+void SomeFunction(Instruction* inst);
+void SomeOtherFunction(Instruction* inst);
 
 }  // namespace rv32
 }  // namespace riscv
diff --git a/mpact/sim/generic/action_point_manager_base.cc b/mpact/sim/generic/action_point_manager_base.cc
index 21f9999..ea53a81 100644
--- a/mpact/sim/generic/action_point_manager_base.cc
+++ b/mpact/sim/generic/action_point_manager_base.cc
@@ -25,12 +25,12 @@
 namespace mpact::sim::generic {
 
 ActionPointManagerBase::ActionPointManagerBase(
-    ActionPointMemoryInterface *ap_mem_interface)
+    ActionPointMemoryInterface* ap_mem_interface)
     : ap_memory_interface_(ap_mem_interface) {}
 
 ActionPointManagerBase::~ActionPointManagerBase() {
-  for (auto &[unused, ap_ptr] : action_point_map_) {
-    for (auto &[unused, ai_ptr] : ap_ptr->action_map) {
+  for (auto& [unused, ap_ptr] : action_point_map_) {
+    for (auto& [unused, ai_ptr] : ap_ptr->action_map) {
       ai_ptr->action_fcn = nullptr;
       delete ai_ptr;
     }
@@ -47,7 +47,7 @@
 absl::StatusOr<int> ActionPointManagerBase::SetAction(uint64_t address,
                                                       ActionFcn action_fcn) {
   auto it = action_point_map_.find(address);
-  ActionPointInfo *ap = nullptr;
+  ActionPointInfo* ap = nullptr;
   if (it == action_point_map_.end()) {
     // If the action point doesn't exist, create a new one.
     // First set the breakpoint instruction.
@@ -65,7 +65,7 @@
   }
   // Add the function as an enabled action.
   int id = ap->next_id++;
-  auto *action_info =
+  auto* action_info =
       new ActionInfo(std::move(action_fcn), /*is_enabled=*/true);
   ap->action_map.insert(std::make_pair(id, action_info));
   ap->num_active++;
@@ -80,14 +80,14 @@
         absl::StrCat("No action point found at: ", absl::Hex(address)));
   }
   // Find the action.
-  auto *ap = it->second;
+  auto* ap = it->second;
   auto action_it = ap->action_map.find(id);
   if (action_it == ap->action_map.end()) {
     return absl::NotFoundError(
         absl::StrCat("No action ", id, "found at: ", absl::Hex(address)));
   }
   // Remove the action.
-  auto *action_info = action_it->second;
+  auto* action_info = action_it->second;
   ap->action_map.erase(action_it);
   ap->num_active -= action_info->is_enabled ? 1 : 0;
   delete action_info;
@@ -106,7 +106,7 @@
     return absl::NotFoundError(
         absl::StrCat("No action point found at: ", absl::Hex(address)));
   }
-  auto *ap = it->second;
+  auto* ap = it->second;
   // Find the action.
   auto action_it = ap->action_map.find(id);
   if (action_it == ap->action_map.end()) {
@@ -133,7 +133,7 @@
         absl::StrCat("No action point found at: ", absl::Hex(address)));
   }
   // Find the action.
-  auto *ap = it->second;
+  auto* ap = it->second;
   auto action_it = ap->action_map.find(id);
   if (action_it == ap->action_map.end()) {
     return absl::NotFoundError(
@@ -157,7 +157,7 @@
   auto it = action_point_map_.find(address);
   if (it == action_point_map_.end()) return false;
 
-  auto *ap = it->second;
+  auto* ap = it->second;
   return ap->num_active > 0;
 }
 
@@ -166,7 +166,7 @@
   auto it = action_point_map_.find(address);
   if (it == action_point_map_.end()) return false;
 
-  auto *ap = it->second;
+  auto* ap = it->second;
   // Find the action.
   auto action_it = ap->action_map.find(id);
   if (action_it == ap->action_map.end()) return false;
@@ -174,8 +174,8 @@
 }
 
 void ActionPointManagerBase::ClearAllActionPoints() {
-  for (auto &[address, ap_ptr] : action_point_map_) {
-    for (auto &[unused, action_ptr] : ap_ptr->action_map) {
+  for (auto& [address, ap_ptr] : action_point_map_) {
+    for (auto& [unused, action_ptr] : ap_ptr->action_map) {
       delete action_ptr;
     }
     ap_ptr->action_map.clear();
@@ -192,7 +192,7 @@
                                absl::Hex(address));
   }
 
-  for (auto &[id, action_ptr] : it->second->action_map) {
+  for (auto& [id, action_ptr] : it->second->action_map) {
     if (action_ptr->is_enabled) action_ptr->action_fcn(address, id);
   }
 }
diff --git a/mpact/sim/generic/action_point_manager_base.h b/mpact/sim/generic/action_point_manager_base.h
index abb8d4e..798c461 100644
--- a/mpact/sim/generic/action_point_manager_base.h
+++ b/mpact/sim/generic/action_point_manager_base.h
@@ -64,7 +64,7 @@
   using ActionFcn = absl::AnyInvocable<void(uint64_t address, int id)>;
 
   // The constructor takes an instance of the ActionPointMemoryInterface class.
-  ActionPointManagerBase(ActionPointMemoryInterface *ap_mem_interface);
+  ActionPointManagerBase(ActionPointMemoryInterface* ap_mem_interface);
   virtual ~ActionPointManagerBase();
 
   // Returns true if the given address has an action point, regardless of
@@ -90,7 +90,7 @@
   void PerformActions(uint64_t address);
 
   // Accessor.
-  ActionPointMemoryInterface *ap_memory_interface() const {
+  ActionPointMemoryInterface* ap_memory_interface() const {
     return ap_memory_interface_;
   }
 
@@ -112,14 +112,14 @@
     // Number of 'actions' that are enabled.
     int num_active = 0;
     // Map from id to action function struct.
-    absl::btree_map<int, ActionInfo *> action_map;
+    absl::btree_map<int, ActionInfo*> action_map;
     ActionPointInfo(uint64_t address) : address(address) {}
   };
 
   // Interface to program memory.
-  ActionPointMemoryInterface *ap_memory_interface_;
+  ActionPointMemoryInterface* ap_memory_interface_;
   // Map from address to action info struct.
-  absl::btree_map<uint64_t, ActionPointInfo *> action_point_map_;
+  absl::btree_map<uint64_t, ActionPointInfo*> action_point_map_;
 };
 
 }  // namespace mpact::sim::generic
diff --git a/mpact/sim/generic/arch_state.h b/mpact/sim/generic/arch_state.h
index 30316ac..674795b 100644
--- a/mpact/sim/generic/arch_state.h
+++ b/mpact/sim/generic/arch_state.h
@@ -51,24 +51,24 @@
  protected:
   ArchState() = delete;
   explicit ArchState(absl::string_view id) : ArchState(nullptr, id, nullptr) {}
-  ArchState(absl::string_view id, SourceOperandInterface *pc_operand)
+  ArchState(absl::string_view id, SourceOperandInterface* pc_operand)
       : ArchState(nullptr, id, pc_operand) {}
-  ArchState(Component *parent, absl::string_view id,
-            SourceOperandInterface *pc_operand);
+  ArchState(Component* parent, absl::string_view id,
+            SourceOperandInterface* pc_operand);
 
  public:
   ~ArchState() override;
 
  public:
-  using RegisterMap = absl::flat_hash_map<std::string, RegisterBase *>;
-  using FifoMap = absl::flat_hash_map<std::string, FifoBase *>;
+  using RegisterMap = absl::flat_hash_map<std::string, RegisterBase*>;
+  using FifoMap = absl::flat_hash_map<std::string, FifoBase*>;
 
   // Adds the given register to the register table.
-  void AddRegister(RegisterBase *reg);
+  void AddRegister(RegisterBase* reg);
   // Adds the given register to the register table but using name as key. This
   // is useful when a register object may be accessible using more than one
   // name, or a name that differs from that stored in the register object.
-  void AddRegister(absl::string_view name, RegisterBase *reg);
+  void AddRegister(absl::string_view name, RegisterBase* reg);
   // Remove the named register from the register table. No action occurs if
   // there is no such register. If multiple names map to the same register
   // object, only the single mapping from the given name is removed.
@@ -76,18 +76,18 @@
 
   // Creates a register of the given type and adds it to the register table.
   template <typename RegisterType, typename... Ps>
-  RegisterType *AddRegister(absl::string_view name, Ps... pargs) {
+  RegisterType* AddRegister(absl::string_view name, Ps... pargs) {
     auto reg = new RegisterType(this, name, pargs...);
     AddRegister(reg);
     return reg;
   }
 
   // Adds the given fifo to the fifo table.
-  void AddFifo(FifoBase *fifo);
+  void AddFifo(FifoBase* fifo);
   // Adds the given fifo to the fifo table but using name as key. This is useful
   // when a fifo object may be accessed using more than one name, or a name that
   // differs from that stored in the fifo object.
-  void AddFifo(absl::string_view name, FifoBase *fifo);
+  void AddFifo(absl::string_view name, FifoBase* fifo);
   // Remove the named fifo from the fifo table. No action occurs if there is no
   // such fifo. If multiple names map to the same fifo object, only the single
   // mapping from the given name is removed.
@@ -95,7 +95,7 @@
 
   // Creates a fifo of the given type and adds it to the fifo table.
   template <typename FifoType, typename... Ps>
-  FifoType *AddFifo(absl::string_view name, Ps... pargs) {
+  FifoType* AddFifo(absl::string_view name, Ps... pargs) {
     auto fifo = new FifoType(this, name, pargs...);
     AddFifo(fifo);
     return fifo;
@@ -116,11 +116,11 @@
   // delay lines outside of ArchState instances. Delay lines managed by the
   // ArchState instance will be deleted when the ArchState is deleted.
   template <typename DelayLineType, typename... Ps>
-  DelayLineType *CreateAndAddDelayLine(Ps... pargs) {
+  DelayLineType* CreateAndAddDelayLine(Ps... pargs) {
     static_assert(
-        std::is_convertible<DelayLineType *, DelayLineInterface *>::value);
-    DelayLineType *delay_line = new DelayLineType(pargs...);
-    delay_lines_.push_back(static_cast<DelayLineInterface *>(delay_line));
+        std::is_convertible<DelayLineType*, DelayLineInterface*>::value);
+    DelayLineType* delay_line = new DelayLineType(pargs...);
+    delay_lines_.push_back(static_cast<DelayLineInterface*>(delay_line));
     return delay_line;
   }
   // This function is called after any event that may have caused an interrupt
@@ -130,46 +130,46 @@
   virtual void CheckForInterrupt() { /*empty*/ }
 
   // Accessors for data members
-  const std::string &id() const { return component_name(); }
+  const std::string& id() const { return component_name(); }
   // The DataBufferFactory associated with this architecture instance.
-  DataBufferFactory *db_factory() const { return db_factory_; }
+  DataBufferFactory* db_factory() const { return db_factory_; }
   // The table of registers.
-  RegisterMap *registers() { return &registers_; }
+  RegisterMap* registers() { return &registers_; }
   // The table of fifos.
-  FifoMap *fifos() { return &fifos_; }
+  FifoMap* fifos() { return &fifos_; }
   // The DataBuffer instance delay line.
-  DataBufferDelayLine *data_buffer_delay_line() const {
+  DataBufferDelayLine* data_buffer_delay_line() const {
     return data_buffer_delay_line_;
   }
   // The void() function delay line
-  FunctionDelayLine *function_delay_line() const {
+  FunctionDelayLine* function_delay_line() const {
     return function_delay_line_;
   }
   // Returns the PC operand interface (read only)
-  SourceOperandInterface *pc_operand() const { return pc_operand_; }
+  SourceOperandInterface* pc_operand() const { return pc_operand_; }
   // Used to report program error (or even internal simulator errors).
-  ProgramErrorController *program_error_controller() const {
+  ProgramErrorController* program_error_controller() const {
     return program_error_controller_;
   }
 
   uint64_t cycle() const { return cycle_; }
 
  protected:
-  void set_pc_operand(SourceOperandInterface *pc_operand) {
+  void set_pc_operand(SourceOperandInterface* pc_operand) {
     pc_operand_ = pc_operand;
   }
   void set_cycle(uint64_t value) { cycle_ = value; }
 
  private:
   uint64_t cycle_ = 0;
-  SourceOperandInterface *pc_operand_;
-  DataBufferFactory *db_factory_;
+  SourceOperandInterface* pc_operand_;
+  DataBufferFactory* db_factory_;
   RegisterMap registers_;
   FifoMap fifos_;
-  DataBufferDelayLine *data_buffer_delay_line_;
-  FunctionDelayLine *function_delay_line_;
-  std::vector<DelayLineInterface *> delay_lines_;
-  ProgramErrorController *program_error_controller_;
+  DataBufferDelayLine* data_buffer_delay_line_;
+  FunctionDelayLine* function_delay_line_;
+  std::vector<DelayLineInterface*> delay_lines_;
+  ProgramErrorController* program_error_controller_;
 };
 
 }  // namespace generic
diff --git a/mpact/sim/generic/breakpoint_manager.cc b/mpact/sim/generic/breakpoint_manager.cc
index 9043231..7967d47 100644
--- a/mpact/sim/generic/breakpoint_manager.cc
+++ b/mpact/sim/generic/breakpoint_manager.cc
@@ -29,13 +29,13 @@
 namespace generic {
 
 BreakpointManager::BreakpointManager(
-    ActionPointManagerBase *action_point_manager,
+    ActionPointManagerBase* action_point_manager,
     RequestHaltFunction req_halt_function)
     : req_halt_function_(std::move(req_halt_function)),
       action_point_manager_(action_point_manager) {}
 
 BreakpointManager::~BreakpointManager() {
-  for (auto const &[unused, bp_ptr] : breakpoint_map_) {
+  for (auto const& [unused, bp_ptr] : breakpoint_map_) {
     delete bp_ptr;
   }
   req_halt_function_ = nullptr;
@@ -57,7 +57,7 @@
   if (!result.ok()) return result.status();
   auto id = result.value();
 
-  auto *bp = new BreakpointInfo{address, id, /*is_active=*/true};
+  auto* bp = new BreakpointInfo{address, id, /*is_active=*/true};
   breakpoint_map_.insert(std::make_pair(address, bp));
 
   return absl::OkStatus();
@@ -75,7 +75,7 @@
   auto status = action_point_manager_->ClearAction(address, iter->second->id);
   if (!status.ok()) return status;
 
-  auto *bp = iter->second;
+  auto* bp = iter->second;
   breakpoint_map_.erase(iter);
   delete bp;
   return absl::OkStatus();
@@ -106,7 +106,7 @@
 }
 
 void BreakpointManager::ClearAllBreakpoints() {
-  for (auto const &[unused, bp_ptr] : breakpoint_map_) {
+  for (auto const& [unused, bp_ptr] : breakpoint_map_) {
     (void)action_point_manager_->ClearAction(bp_ptr->address, bp_ptr->id);
     delete bp_ptr;
   }
diff --git a/mpact/sim/generic/breakpoint_manager.h b/mpact/sim/generic/breakpoint_manager.h
index bd77982..f0dca00 100644
--- a/mpact/sim/generic/breakpoint_manager.h
+++ b/mpact/sim/generic/breakpoint_manager.h
@@ -37,7 +37,7 @@
   // Define a function type to use for the breakpoint action to call for a halt.
   using RequestHaltFunction = absl::AnyInvocable<void()>;
 
-  BreakpointManager(ActionPointManagerBase *action_point_manager,
+  BreakpointManager(ActionPointManagerBase* action_point_manager,
                     RequestHaltFunction req_halt_function);
   ~BreakpointManager();
 
@@ -55,7 +55,7 @@
   bool IsBreakpoint(uint64_t address) const;
 
   // Accessor.
-  ActionPointManagerBase *action_point_manager() const {
+  ActionPointManagerBase* action_point_manager() const {
     return action_point_manager_;
   }
 
@@ -71,8 +71,8 @@
   RequestHaltFunction req_halt_function_;
   void DoBreakpointAction(uint64_t, int);
 
-  ActionPointManagerBase *action_point_manager_;
-  absl::btree_map<uint64_t, BreakpointInfo *> breakpoint_map_;
+  ActionPointManagerBase* action_point_manager_;
+  absl::btree_map<uint64_t, BreakpointInfo*> breakpoint_map_;
 };
 
 }  // namespace generic
diff --git a/mpact/sim/generic/complex_resource.cc b/mpact/sim/generic/complex_resource.cc
index fcf54e9..bcefed9 100644
--- a/mpact/sim/generic/complex_resource.cc
+++ b/mpact/sim/generic/complex_resource.cc
@@ -15,9 +15,13 @@
 #include "mpact/sim/generic/complex_resource.h"
 
 #include <algorithm>
+#include <cstddef>
+#include <cstdint>
+#include <cstring>
 #include <string>
 
-#include "absl/status/status.h"
+#include "absl/types/span.h"
+#include "mpact/sim/generic/arch_state.h"
 
 namespace mpact {
 namespace sim {
@@ -26,7 +30,7 @@
 constexpr size_t kNumBitsPerWord = sizeof(uint64_t) * 8;
 constexpr size_t kLowBitMask = kNumBitsPerWord - 1;
 
-ComplexResource::ComplexResource(ArchState *state, std::string name,
+ComplexResource::ComplexResource(ArchState* state, std::string name,
                                  size_t cycle_depth)
     : state_(state), name_(name), cycle_depth_(cycle_depth) {
   array_size_ = (cycle_depth_ + kNumBitsPerWord - 1) / kNumBitsPerWord;
diff --git a/mpact/sim/generic/complex_resource.h b/mpact/sim/generic/complex_resource.h
index 3e9a476..1d3b12d 100644
--- a/mpact/sim/generic/complex_resource.h
+++ b/mpact/sim/generic/complex_resource.h
@@ -15,9 +15,10 @@
 #ifndef MPACT_SIM_GENERIC_COMPLEX_RESOURCE_H_
 #define MPACT_SIM_GENERIC_COMPLEX_RESOURCE_H_
 
+#include <cstddef>
+#include <cstdint>
 #include <string>
 
-#include "absl/status/status.h"
 #include "absl/types/span.h"
 #include "mpact/sim/generic/arch_state.h"
 
@@ -44,7 +45,7 @@
  public:
   static inline const int kMaxDepth = 512;
 
-  ComplexResource(ArchState *state, std::string name, size_t cycle_depth);
+  ComplexResource(ArchState* state, std::string name, size_t cycle_depth);
   ComplexResource() = delete;
   ~ComplexResource();
 
@@ -58,8 +59,8 @@
   // Return printable representation.
   std::string AsString() const { return name(); }
   // Accessors.
-  const std::string &name() const { return name_; }
-  const absl::Span<uint64_t> bit_array() const {
+  const std::string& name() const { return name_; }
+  absl::Span<uint64_t> bit_array() const {
     return absl::MakeSpan(bit_array_, array_size_);
   }
   size_t cycle_depth() const { return cycle_depth_; }
@@ -68,7 +69,7 @@
   // Advance the cycle vector to current time.
   void Advance();
   // Pointer to the arch state. This is needed to obtain current time.
-  ArchState *state_;
+  ArchState* state_;
   // Name of resource.
   std::string name_;
   // Last time the cycle vector was shifted.
@@ -78,8 +79,8 @@
   // How many uint64_t elements in the array.
   size_t array_size_;
   // Pointer to the arrays.
-  uint64_t *bit_array_ = nullptr;
-  uint64_t *mask_array_ = nullptr;
+  uint64_t* bit_array_ = nullptr;
+  uint64_t* mask_array_ = nullptr;
 };
 
 }  // namespace generic
diff --git a/mpact/sim/generic/complex_resource_operand.cc b/mpact/sim/generic/complex_resource_operand.cc
index f5fb474..a2413e4 100644
--- a/mpact/sim/generic/complex_resource_operand.cc
+++ b/mpact/sim/generic/complex_resource_operand.cc
@@ -14,7 +14,13 @@
 
 #include "mpact/sim/generic/complex_resource_operand.h"
 
+#include <cstddef>
+#include <cstdint>
+#include <cstring>
+
 #include "absl/status/status.h"
+#include "absl/strings/str_cat.h"
+#include "absl/types/span.h"
 
 namespace mpact {
 namespace sim {
diff --git a/mpact/sim/generic/complex_resource_operand.h b/mpact/sim/generic/complex_resource_operand.h
index 57ef0d8..7fda90d 100644
--- a/mpact/sim/generic/complex_resource_operand.h
+++ b/mpact/sim/generic/complex_resource_operand.h
@@ -15,6 +15,8 @@
 #ifndef MPACT_SIM_GENERIC_COMPLEX_RESOURCE_OPERAND_H_
 #define MPACT_SIM_GENERIC_COMPLEX_RESOURCE_OPERAND_H_
 
+#include <cstddef>
+#include <cstdint>
 #include <string>
 
 #include "absl/status/status.h"
@@ -32,7 +34,7 @@
 class ComplexResourceOperand : public ResourceOperandInterface {
  public:
   ComplexResourceOperand() = delete;
-  explicit ComplexResourceOperand(ComplexResource *resource)
+  explicit ComplexResourceOperand(ComplexResource* resource)
       : resource_(resource) {}
 
   ~ComplexResourceOperand() override { delete[] bit_array_; }
@@ -62,8 +64,8 @@
   }
 
  private:
-  ComplexResource *resource_ = nullptr;
-  uint64_t *bit_array_ = nullptr;
+  ComplexResource* resource_ = nullptr;
+  uint64_t* bit_array_ = nullptr;
   int span_size_ = 0;
 };
 
diff --git a/mpact/sim/generic/component.cc b/mpact/sim/generic/component.cc
index 08b63bb..a4aa0f7 100644
--- a/mpact/sim/generic/component.cc
+++ b/mpact/sim/generic/component.cc
@@ -35,7 +35,7 @@
 // for the element data type. This template static function factors out the
 // commonalities.
 template <typename M, typename T>
-static T *GetMapEntry(const M &map, absl::string_view name) {
+static T* GetMapEntry(const M& map, absl::string_view name) {
   auto ptr = map.find(name);
   return (ptr == map.end()) ? nullptr : ptr->second;
 }
@@ -44,7 +44,7 @@
 // for the element data type. This template static function factors out the
 // commonalities.
 template <typename M, typename T>
-static absl::Status AddMapEntry(absl::string_view name, T *entry, M *map) {
+static absl::Status AddMapEntry(absl::string_view name, T* entry, M* map) {
   if (entry == nullptr) return absl::InvalidArgumentError("entry is nullptr");
   auto ptr = map->find(name);
   if (ptr != map->end()) {
@@ -58,7 +58,7 @@
 // Constructors.
 Component::Component(std::string name) : component_name_(std::move(name)) {}
 
-Component::Component(std::string name, Component *parent)
+Component::Component(std::string name, Component* parent)
     : component_name_(std::move(name)) {
   if (parent != nullptr) {
     auto status = parent->AddChildComponent(*this);
@@ -71,24 +71,24 @@
 }
 
 // Call the generic static function to Add the element.
-absl::Status Component::AddChildComponent(Component &child) {
+absl::Status Component::AddChildComponent(Component& child) {
   auto status = AddMapEntry(child.component_name(), &child, &child_map_);
   if (!status.ok()) return status;
   child.SetParent(this);
   return absl::OkStatus();
 }
-absl::Status Component::AddCounter(CounterBaseInterface *counter) {
+absl::Status Component::AddCounter(CounterBaseInterface* counter) {
   if (!counter->IsInitialized()) {
     return absl::InvalidArgumentError("Counter has not been initialized");
   }
   return AddMapEntry(counter->GetName(), counter, &counter_map_);
 }
-absl::Status Component::AddConfig(ConfigBase *config) {
+absl::Status Component::AddConfig(ConfigBase* config) {
   return AddMapEntry(config->name(), config, &config_map_);
 }
 
 // Call the generic static function to Get the element.
-Component *Component::GetChildComponent(absl::string_view name) const {
+Component* Component::GetChildComponent(absl::string_view name) const {
   return GetMapEntry<ComponentMap, Component>(child_map_, name);
 }
 absl::Status Component::RemoveChildComponent(absl::string_view name) {
@@ -99,15 +99,15 @@
   child_map_.erase(iter);
   return absl::OkStatus();
 }
-CounterBaseInterface *Component::GetCounter(absl::string_view name) const {
+CounterBaseInterface* Component::GetCounter(absl::string_view name) const {
   return GetMapEntry<CounterMap, CounterBaseInterface>(counter_map_, name);
 }
-ConfigBase *Component::GetConfig(absl::string_view name) const {
+ConfigBase* Component::GetConfig(absl::string_view name) const {
   return GetMapEntry<ConfigMap, ConfigBase>(config_map_, name);
 }
 
 // Import information from the component data proto.
-absl::Status Component::Import(const ComponentData &component_data) {
+absl::Status Component::Import(const ComponentData& component_data) {
   // Checking that the proto name matches. Recursive calls will not generate
   // this error, but need to check at the top level.
   if (!component_data.has_name() ||
@@ -126,13 +126,13 @@
   return absl::OkStatus();
 }
 
-absl::Status Component::ImportSelf(const ComponentData &component_data) {
-  for (auto const &entry : component_data.configuration()) {
+absl::Status Component::ImportSelf(const ComponentData& component_data) {
+  for (auto const& entry : component_data.configuration()) {
     if (!entry.has_name()) {
       // The proto is malformed.
       return absl::InternalError("Missing name in component value");
     }
-    ConfigBase *config = GetConfig(entry.name());
+    ConfigBase* config = GetConfig(entry.name());
     // It's not an error if there are proto values for config entries that
     // aren't registered. Just skip and continue.
     if (config == nullptr) continue;
@@ -143,12 +143,12 @@
   return absl::OkStatus();
 }
 
-absl::Status Component::ImportChildren(const ComponentData &component_data) {
-  for (auto const &child_data : component_data.component_data()) {
+absl::Status Component::ImportChildren(const ComponentData& component_data) {
+  for (auto const& child_data : component_data.component_data()) {
     if (!child_data.has_name()) {
       return absl::InternalError("Unnamed child component");
     }
-    Component *child = GetChildComponent(child_data.name());
+    Component* child = GetChildComponent(child_data.name());
     if (child == nullptr) continue;
     auto status = child->Import(child_data);
     if (!status.ok()) return status;
@@ -158,37 +158,37 @@
 
 void Component::ImportDone() const {
   // Propagate down the component hierarchy.
-  for (auto const &[unused, child] : child_map_) {
+  for (auto const& [unused, child] : child_map_) {
     child->ImportDone();
   }
   // Notify through callbacks.
-  for (auto const &callback : callback_vec_) {
+  for (auto const& callback : callback_vec_) {
     callback();
   }
 }
 
 // Export the information reachable from this component to the mutable
 // component data proto.
-absl::Status Component::Export(ComponentData *component_data) {
+absl::Status Component::Export(ComponentData* component_data) {
   if (component_data == nullptr) {
     return absl::InvalidArgumentError("Component data is null");
   }
   component_data->set_name(component_name());
   // Export the configuration values.
-  for (auto const &[unused, config_pair] : config_map_) {
-    ComponentValueEntry *entry = component_data->add_configuration();
+  for (auto const& [unused, config_pair] : config_map_) {
+    ComponentValueEntry* entry = component_data->add_configuration();
     auto status = config_pair->Export(entry);
     if (!status.ok()) return status;
   }
   // Export the counter values.
-  for (auto const &[unused, counter_pair] : counter_map_) {
-    ComponentValueEntry *entry = component_data->add_statistics();
+  for (auto const& [unused, counter_pair] : counter_map_) {
+    ComponentValueEntry* entry = component_data->add_statistics();
     auto status = counter_pair->Export(entry);
     if (!status.ok()) return status;
   }
   // Recursively export child component data.
-  for (auto const &[unused, child_pair] : child_map_) {
-    ComponentData *child_data = component_data->add_component_data();
+  for (auto const& [unused, child_pair] : child_map_) {
+    ComponentData* child_data = component_data->add_component_data();
     auto status = child_pair->Export(child_data);
     if (!status.ok()) return status;
   }
diff --git a/mpact/sim/generic/component.h b/mpact/sim/generic/component.h
index 7dcc52b..253edbe 100644
--- a/mpact/sim/generic/component.h
+++ b/mpact/sim/generic/component.h
@@ -40,73 +40,73 @@
 class Component {
  public:
   // Using btree_map to ensure proto exports are done in name order.
-  using ComponentMap = absl::btree_map<std::string, Component *>;
-  using CounterMap = absl::btree_map<std::string, CounterBaseInterface *>;
-  using ConfigMap = absl::btree_map<std::string, ConfigBase *>;
+  using ComponentMap = absl::btree_map<std::string, Component*>;
+  using CounterMap = absl::btree_map<std::string, CounterBaseInterface*>;
+  using ConfigMap = absl::btree_map<std::string, ConfigBase*>;
   // Type alias for import done callback function.
   using CallbackFunction = std::function<void()>;
   // Create a Component with no parent.
   explicit Component(std::string name);
   // Create a Component under the given parent. Adds the component to the
   // parent's child components.
-  Component(std::string name, Component *parent);
+  Component(std::string name, Component* parent);
   Component() = delete;
-  Component(const Component &) = delete;
-  Component operator=(const Component &) = delete;
+  Component(const Component&) = delete;
+  Component operator=(const Component&) = delete;
   virtual ~Component() = default;
 
   // Methods to add and access child components, counters and config entries.
-  absl::Status AddChildComponent(Component &child);
-  absl::Status AddCounter(CounterBaseInterface *counter);
-  absl::Status AddConfig(ConfigBase *config);
-  Component *GetChildComponent(absl::string_view name) const;
+  absl::Status AddChildComponent(Component& child);
+  absl::Status AddCounter(CounterBaseInterface* counter);
+  absl::Status AddConfig(ConfigBase* config);
+  Component* GetChildComponent(absl::string_view name) const;
   absl::Status RemoveChildComponent(absl::string_view name);
-  CounterBaseInterface *GetCounter(absl::string_view name) const;
-  ConfigBase *GetConfig(absl::string_view name) const;
+  CounterBaseInterface* GetCounter(absl::string_view name) const;
+  ConfigBase* GetConfig(absl::string_view name) const;
 
   // Imports the ComponentData proto into the current Component, registered
   // child component instances, and registered ConfigBase instances. No values
   // are imported into counters. This method may be overridden.
   virtual absl::Status Import(
-      const mpact::sim::proto::ComponentData &component_data);
+      const mpact::sim::proto::ComponentData& component_data);
 
   // This method is called when all imports are done. Can be overridden.
   virtual void ImportDone() const;
 
   // Register a callback function to be called when import is done.
   template <typename F>
-  void AddImportDoneCallback(const F &callback) {
+  void AddImportDoneCallback(const F& callback) {
     callback_vec_.push_back(callback);
   }
 
   // Exports the data from the current Component instance, its' registered child
   // components, registered ConfigBase instances, and registered CounterBase
   // instances.
-  absl::Status Export(proto::ComponentData *component_data);
+  absl::Status Export(proto::ComponentData* component_data);
 
   // Accessors.
-  const std::string &component_name() const { return component_name_; }
-  Component *parent() const { return parent_; }
+  const std::string& component_name() const { return component_name_; }
+  Component* parent() const { return parent_; }
 
   // Map accessors.
-  const ComponentMap &child_map() const { return child_map_; }
-  const CounterMap &counter_map() const { return counter_map_; }
-  const ConfigMap &config_map() const { return config_map_; }
+  const ComponentMap& child_map() const { return child_map_; }
+  const CounterMap& counter_map() const { return counter_map_; }
+  const ConfigMap& config_map() const { return config_map_; }
 
  protected:
   // The Import method is divided into import self and import children. Each
   // can be individually overridden.
   virtual absl::Status ImportSelf(
-      const mpact::sim::proto::ComponentData &component_data);
+      const mpact::sim::proto::ComponentData& component_data);
   virtual absl::Status ImportChildren(
-      const mpact::sim::proto::ComponentData &component_data);
+      const mpact::sim::proto::ComponentData& component_data);
 
  private:
   // Private accessor.
-  void SetParent(Component *parent) { parent_ = parent; }
+  void SetParent(Component* parent) { parent_ = parent; }
 
   std::string component_name_;
-  Component *parent_ = nullptr;
+  Component* parent_ = nullptr;
 
   // None of the objects pointed to by these maps are owned by this object.
   ComponentMap child_map_;
diff --git a/mpact/sim/generic/config.h b/mpact/sim/generic/config.h
index 68aaf24..346804b 100644
--- a/mpact/sim/generic/config.h
+++ b/mpact/sim/generic/config.h
@@ -72,20 +72,20 @@
  public:
   explicit ConfigBase(absl::string_view name) : name_(name) {}
   ConfigBase() = delete;
-  ConfigBase(const ConfigBase &) = delete;
-  ConfigBase &operator=(const ConfigBase &) = delete;
+  ConfigBase(const ConfigBase&) = delete;
+  ConfigBase& operator=(const ConfigBase&) = delete;
   virtual ~ConfigBase() = default;
 
   // Return true if the config value has been set since construction.
   virtual bool HasConfigValue() const = 0;
   // Variant value accessors provide type agnostic access to config value.
   virtual ConfigValue GetConfigValue() const = 0;
-  virtual absl::Status SetConfigValue(const ConfigValue &) = 0;
+  virtual absl::Status SetConfigValue(const ConfigValue&) = 0;
   // Exports the Config (name and value) to the proto message.
-  virtual absl::Status Export(proto::ComponentValueEntry *entry) const = 0;
-  virtual absl::Status Import(const proto::ComponentValueEntry *entry) = 0;
+  virtual absl::Status Export(proto::ComponentValueEntry* entry) const = 0;
+  virtual absl::Status Import(const proto::ComponentValueEntry* entry) = 0;
 
-  const std::string &name() const { return name_; }
+  const std::string& name() const { return name_; }
 
  private:
   std::string name_;
@@ -118,7 +118,7 @@
   ConfigValue GetConfigValue() const override {
     return ConfigValue(GetValue());
   }
-  absl::Status SetConfigValue(const ConfigValue &config_value) override {
+  absl::Status SetConfigValue(const ConfigValue& config_value) override {
     if (!std::holds_alternative<T>(config_value)) {
       return absl::InvalidArgumentError("Invalid type in ConfigValue argument");
     }
@@ -135,7 +135,7 @@
   void SetValue(T value) {
     has_value_ = true;
     value_ = value;
-    for (auto const &callback : value_written_callback_vector_) {
+    for (auto const& callback : value_written_callback_vector_) {
       callback();
     }
   }
@@ -149,7 +149,7 @@
     value_written_callback_vector_.push_back(ValueWrittenCallback(callback));
   }
   // Exports the configuration entry name and value to the proto message.
-  absl::Status Export(proto::ComponentValueEntry *entry) const override {
+  absl::Status Export(proto::ComponentValueEntry* entry) const override {
     if (entry == nullptr) return absl::InvalidArgumentError("Entry is null");
     entry->set_name(name());
     ExportValue(entry);
@@ -157,7 +157,7 @@
   }
   // Imports the configuration entry value in the proto. Returns an error if the
   // name doesn't match or the entry is nullptr.
-  absl::Status Import(const proto::ComponentValueEntry *entry) override {
+  absl::Status Import(const proto::ComponentValueEntry* entry) override {
     if (entry == nullptr) return absl::InvalidArgumentError("Entry is null");
     if (!entry->has_name() || (entry->name() != name()))
       return absl::InternalError(
@@ -173,9 +173,9 @@
   // in specializations outside the class, as each specialization requires
   // writing to a different field in the proto message.
   // Exports the value to the proto message.
-  void ExportValue(proto::ComponentValueEntry *entry) const;
+  void ExportValue(proto::ComponentValueEntry* entry) const;
   // Imports the value from the proto message.
-  absl::Status ImportValue(const proto::ComponentValueEntry *entry);
+  absl::Status ImportValue(const proto::ComponentValueEntry* entry);
   bool has_value_ = false;
   T value_;
   std::vector<ValueWrittenCallback> value_written_callback_vector_;
@@ -187,34 +187,34 @@
 // ExportValue() specializations for the types in the ConfigValue variant.
 // NOTE: add a specialization for every new type added to the variant.
 template <>
-inline void Config<bool>::ExportValue(proto::ComponentValueEntry *entry) const {
+inline void Config<bool>::ExportValue(proto::ComponentValueEntry* entry) const {
   entry->set_bool_value(GetValue());
 }
 template <>
 inline void Config<int64_t>::ExportValue(
-    proto::ComponentValueEntry *entry) const {
+    proto::ComponentValueEntry* entry) const {
   entry->set_sint64_value(GetValue());
 }
 template <>
 inline void Config<uint64_t>::ExportValue(
-    proto::ComponentValueEntry *entry) const {
+    proto::ComponentValueEntry* entry) const {
   entry->set_uint64_value(GetValue());
 }
 template <>
 inline void Config<double>::ExportValue(
-    proto::ComponentValueEntry *entry) const {
+    proto::ComponentValueEntry* entry) const {
   entry->set_double_value(GetValue());
 }
 template <>
 inline void Config<std::string>::ExportValue(
-    proto::ComponentValueEntry *entry) const {
+    proto::ComponentValueEntry* entry) const {
   entry->set_string_value(GetValue());
 }
 template <>
 inline void Config<PhysicalValue>::ExportValue(
-    proto::ComponentValueEntry *entry) const {
-  auto *pvalue = entry->mutable_physical_value();
-  const PhysicalValue &value = GetValue();
+    proto::ComponentValueEntry* entry) const {
+  auto* pvalue = entry->mutable_physical_value();
+  const PhysicalValue& value = GetValue();
   pvalue->set_value(value.value);
   pvalue->set_si_prefix(value.si_prefix);
   pvalue->set_si_unit(value.si_unit);
@@ -223,35 +223,35 @@
 // NOTE: add a specialization for every new type added to the variant.
 template <>
 inline absl::Status Config<bool>::ImportValue(
-    const proto::ComponentValueEntry *entry) {
+    const proto::ComponentValueEntry* entry) {
   if (!entry->has_bool_value()) return absl::InternalError("No valid value");
   SetValue(entry->bool_value());
   return absl::OkStatus();
 }
 template <>
 inline absl::Status Config<int64_t>::ImportValue(
-    const proto::ComponentValueEntry *entry) {
+    const proto::ComponentValueEntry* entry) {
   if (!entry->has_sint64_value()) return absl::InternalError("No valid value");
   SetValue(entry->sint64_value());
   return absl::OkStatus();
 }
 template <>
 inline absl::Status Config<uint64_t>::ImportValue(
-    const proto::ComponentValueEntry *entry) {
+    const proto::ComponentValueEntry* entry) {
   if (!entry->has_uint64_value()) return absl::InternalError("No valid value");
   SetValue(entry->uint64_value());
   return absl::OkStatus();
 }
 template <>
 inline absl::Status Config<double>::ImportValue(
-    const proto::ComponentValueEntry *entry) {
+    const proto::ComponentValueEntry* entry) {
   if (!entry->has_double_value()) return absl::InternalError("No valid value");
   SetValue(entry->double_value());
   return absl::OkStatus();
 }
 template <>
 inline absl::Status Config<std::string>::ImportValue(
-    const proto::ComponentValueEntry *entry) {
+    const proto::ComponentValueEntry* entry) {
   if (!entry->has_string_value()) return absl::InternalError("No valid value");
   SetValue(entry->string_value());
   return absl::OkStatus();
@@ -259,7 +259,7 @@
 
 template <>
 inline absl::Status Config<PhysicalValue>::ImportValue(
-    const proto::ComponentValueEntry *entry) {
+    const proto::ComponentValueEntry* entry) {
   if (!entry->has_physical_value())
     return absl::InternalError("No valid value");
   SetValue(PhysicalValue(entry->physical_value().value(),
diff --git a/mpact/sim/generic/control_register.cc b/mpact/sim/generic/control_register.cc
index 05c8791..4be0937 100644
--- a/mpact/sim/generic/control_register.cc
+++ b/mpact/sim/generic/control_register.cc
@@ -16,13 +16,17 @@
 
 #include <vector>
 
+#include "absl/strings/string_view.h"
+#include "mpact/sim/generic/data_buffer.h"
+#include "mpact/sim/generic/register.h"
+
 namespace mpact {
 namespace sim {
 namespace generic {
 
 ControlRegisterBase::ControlRegisterBase(
-    ArchState *arch_state, absl::string_view name,
-    const std::vector<int> &shape, int element_size,
+    ArchState* arch_state, absl::string_view name,
+    const std::vector<int>& shape, int element_size,
     UpdateCallbackFunction on_update_callback)
     : RegisterBase(arch_state, name, shape, element_size),
       on_update_callback_(on_update_callback) {}
@@ -37,7 +41,7 @@
 //   register->RegisterBase::SetDataBuffer(db);
 // }
 //
-void ControlRegisterBase::SetDataBuffer(DataBuffer *db) {
+void ControlRegisterBase::SetDataBuffer(DataBuffer* db) {
   on_update_callback_(this, db);
 }
 
diff --git a/mpact/sim/generic/control_register.h b/mpact/sim/generic/control_register.h
index 6e6e3fb..010ccd2 100644
--- a/mpact/sim/generic/control_register.h
+++ b/mpact/sim/generic/control_register.h
@@ -34,10 +34,7 @@
 // method is called from the update callback function, as that is the only way
 // the register object's data pointer is updated.
 
-#include <cstdint>
 #include <functional>
-#include <map>
-#include <string>
 #include <vector>
 
 #include "absl/strings/string_view.h"
@@ -59,17 +56,17 @@
  public:
   // Type alias for the update callback function type (set in the constructor).
   using UpdateCallbackFunction =
-      std::function<void(ControlRegisterBase *, DataBuffer *)>;
+      std::function<void(ControlRegisterBase*, DataBuffer*)>;
   ControlRegisterBase() = delete;
-  ControlRegisterBase(const ControlRegisterBase &) = delete;
+  ControlRegisterBase(const ControlRegisterBase&) = delete;
   ~ControlRegisterBase() override = default;
 
   // Calls the update callback function.
-  void SetDataBuffer(DataBuffer *db) override;
+  void SetDataBuffer(DataBuffer* db) override;
 
  protected:
-  ControlRegisterBase(ArchState *arch_state, absl::string_view name,
-                      const std::vector<int> &shape, int element_size,
+  ControlRegisterBase(ArchState* arch_state, absl::string_view name,
+                      const std::vector<int>& shape, int element_size,
                       UpdateCallbackFunction on_update_callback);
 
  private:
diff --git a/mpact/sim/generic/core_debug_interface.h b/mpact/sim/generic/core_debug_interface.h
index 6402696..81d3762 100644
--- a/mpact/sim/generic/core_debug_interface.h
+++ b/mpact/sim/generic/core_debug_interface.h
@@ -91,8 +91,8 @@
   virtual absl::StatusOr<HaltReasonValueType> GetLastHaltReason() = 0;
 
   // Read/write the named registers.
-  virtual absl::StatusOr<uint64_t> ReadRegister(const std::string &name) = 0;
-  virtual absl::Status WriteRegister(const std::string &name,
+  virtual absl::StatusOr<uint64_t> ReadRegister(const std::string& name) = 0;
+  virtual absl::Status WriteRegister(const std::string& name,
                                      uint64_t value) = 0;
 
   // Some registers, including vector registers, have values that exceed the
@@ -105,13 +105,13 @@
   // Note (2): In some cases, a register write may replace the DataBuffer
   // instance within a register so that any stored references to it become
   // stale.
-  virtual absl::StatusOr<DataBuffer *> GetRegisterDataBuffer(
-      const std::string &name) = 0;
+  virtual absl::StatusOr<DataBuffer*> GetRegisterDataBuffer(
+      const std::string& name) = 0;
 
   // Read/write the buffers to memory.
-  virtual absl::StatusOr<size_t> ReadMemory(uint64_t address, void *buf,
+  virtual absl::StatusOr<size_t> ReadMemory(uint64_t address, void* buf,
                                             size_t length) = 0;
-  virtual absl::StatusOr<size_t> WriteMemory(uint64_t address, const void *buf,
+  virtual absl::StatusOr<size_t> WriteMemory(uint64_t address, const void* buf,
                                              size_t length) = 0;
 
   // Test to see if there's a breakpoint at the given address.
@@ -123,7 +123,7 @@
   virtual absl::Status ClearAllSwBreakpoints() = 0;
 
   // Return the instruction object for the instruction at the given address.
-  virtual absl::StatusOr<Instruction *> GetInstruction(uint64_t address) = 0;
+  virtual absl::StatusOr<Instruction*> GetInstruction(uint64_t address) = 0;
   // Return the string representation for the instruction at the given address.
   virtual absl::StatusOr<std::string> GetDisassembly(uint64_t address) = 0;
 };
diff --git a/mpact/sim/generic/counters.h b/mpact/sim/generic/counters.h
index 1c086cb..a544201 100644
--- a/mpact/sim/generic/counters.h
+++ b/mpact/sim/generic/counters.h
@@ -104,7 +104,7 @@
   // to be added a a listener, which means that its SetValue() method will be
   // called whenever value of the counter is updated. The caller retains
   // ownership of the listener.
-  void AddListener(CounterValueSetInterface<T> *listener) {
+  void AddListener(CounterValueSetInterface<T>* listener) {
     listeners_.push_back(listener);
   }
   // Implementation of the pure virtual method from CounterBaseInterface to
@@ -120,7 +120,7 @@
   // for the type specific export, as each different type needs to set
   // a different field in the proto message.
   absl::Status Export(
-      mpact::sim::proto::ComponentValueEntry *entry) const override {
+      mpact::sim::proto::ComponentValueEntry* entry) const override {
     if (entry == nullptr) return absl::InvalidArgumentError("Entry is null");
     entry->set_name(GetName());
     if (!GetAbout().empty()) {
@@ -154,7 +154,7 @@
   // of registered listener objects with the new value.
   void UpdateValue(T value) {
     value_ = std::move(value);
-    for (auto *listener : listeners_) {
+    for (auto* listener : listeners_) {
       listener->SetValue(value_);
     }
   }
@@ -163,10 +163,10 @@
   // This method exports the typed value of the counter to the appropriate
   // field in the proto message. Note, this method is defined at the bottom of
   // this file.
-  void ExportValue(mpact::sim::proto::ComponentValueEntry *entry) const;
+  void ExportValue(mpact::sim::proto::ComponentValueEntry* entry) const;
   // Objects pointed to are owned elsewhere. Their lifetimes must exceed the
   // lifetime of the counter, or at least beyond the last call to UpdateValue.
-  std::vector<CounterValueSetInterface<T> *> listeners_;
+  std::vector<CounterValueSetInterface<T>*> listeners_;
   std::string name_;
   std::string about_;
   bool is_enabled_;
@@ -204,27 +204,27 @@
 
   // Constructor and destructor.
   SimpleCounter() : CounterValueOutputBase<T>() {}
-  SimpleCounter(std::string name, std::string about, const T &initial)
+  SimpleCounter(std::string name, std::string about, const T& initial)
       : CounterValueOutputBase<T>(std::move(name), std::move(about), initial) {}
-  SimpleCounter(std::string name, const T &initial)
+  SimpleCounter(std::string name, const T& initial)
       : CounterValueOutputBase<T>(std::move(name), initial) {}
   SimpleCounter(std::string name, std::string about)
       : SimpleCounter(std::move(name), std::move(about), T()) {}
   explicit SimpleCounter(std::string name)
       : SimpleCounter(std::move(name), T()) {}
-  SimpleCounter &operator=(const SimpleCounter &) = delete;
+  SimpleCounter& operator=(const SimpleCounter&) = delete;
   ~SimpleCounter() override = default;
 
   // Implementing the methods from the CounterValueIncrementInterface<T>. Note
   // that the methods are declared final to enable de-virtualization
   // optimizations in the compiler.
-  void Increment(const T &val) final {
+  void Increment(const T& val) final {
     if (IsEnabled()) UpdateValue(GetValue() + val);
   }
-  void Decrement(const T &val) final {
+  void Decrement(const T& val) final {
     if (IsEnabled()) UpdateValue(GetValue() - val);
   }
-  void SetValue(const T &val) final {
+  void SetValue(const T& val) final {
     if (IsEnabled()) UpdateValue(val);
   }
 
@@ -259,7 +259,7 @@
       "Template argument type Out is not in CounterValue variant.");
 
  public:
-  using ProcessingFunction = std::function<bool(const In &, Out *)>;
+  using ProcessingFunction = std::function<bool(const In&, Out*)>;
   // Since this class derives from templated classes, calls to the base class
   // methods must be qualified or use this->. Electing to do the former with the
   // following using declarations.
@@ -273,7 +273,7 @@
   // If not passed in to the constructor it defaults to a function that always
   // returns false and thus never updates the counter value.
   template <typename F>
-  FunctionCounter(std::string name, const Out &initial, F processing_function)
+  FunctionCounter(std::string name, const Out& initial, F processing_function)
       : CounterValueOutputBase<Out>(std::move(name), initial),
         processing_function_(
             std::move(ProcessingFunction(processing_function))) {}
@@ -281,12 +281,12 @@
   FunctionCounter(std::string name, F processing_function)
       : FunctionCounter(std::move(name), Out(),
                         std::move(processing_function)) {}
-  FunctionCounter(std::string name, const Out &initial)
+  FunctionCounter(std::string name, const Out& initial)
       : FunctionCounter(std::move(name), initial,
-                        [](const In &, Out *) -> bool { return false; }) {}
+                        [](const In&, Out*) -> bool { return false; }) {}
   explicit FunctionCounter(std::string name)
       : FunctionCounter(std::move(name), Out()) {}
-  FunctionCounter &operator=(const FunctionCounter &) = delete;
+  FunctionCounter& operator=(const FunctionCounter&) = delete;
   ~FunctionCounter() override = default;
 
   // Set the value processing function.
@@ -298,7 +298,7 @@
   // The following method is defined final to enable devirtualization
   // optimization in the compiler.
   // Process the input value and update the counter if indicated.
-  void SetValue(const In &in_value) final {
+  void SetValue(const In& in_value) final {
     if (IsEnabled()) {
       Out out_value;
       if (processing_function_(in_value, &out_value)) UpdateValue(out_value);
@@ -319,17 +319,17 @@
 // NOTE: add a specialization for every new type added to the variant.
 template <>
 inline void CounterValueOutputBase<uint64_t>::ExportValue(
-    mpact::sim::proto::ComponentValueEntry *entry) const {
+    mpact::sim::proto::ComponentValueEntry* entry) const {
   entry->set_uint64_value(GetValue());
 }
 template <>
 inline void CounterValueOutputBase<int64_t>::ExportValue(
-    mpact::sim::proto::ComponentValueEntry *entry) const {
+    mpact::sim::proto::ComponentValueEntry* entry) const {
   entry->set_sint64_value(GetValue());
 }
 template <>
 inline void CounterValueOutputBase<double>::ExportValue(
-    mpact::sim::proto::ComponentValueEntry *entry) const {
+    mpact::sim::proto::ComponentValueEntry* entry) const {
   entry->set_double_value(GetValue());
 }
 
diff --git a/mpact/sim/generic/counters_base.h b/mpact/sim/generic/counters_base.h
index 4468afa..5a80391 100644
--- a/mpact/sim/generic/counters_base.h
+++ b/mpact/sim/generic/counters_base.h
@@ -20,8 +20,6 @@
 #include <variant>
 
 #include "absl/status/status.h"
-#include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "mpact/sim/proto/component_data.pb.h"
 
 namespace mpact {
@@ -55,7 +53,7 @@
 
   // Exports the counter values to the proto message.
   virtual absl::Status Export(
-      mpact::sim::proto::ComponentValueEntry *entry) const = 0;
+      mpact::sim::proto::ComponentValueEntry* entry) const = 0;
 
   // Access name and set/get about string.
   virtual std::string GetName() const = 0;
@@ -72,7 +70,7 @@
 class CounterValueSetInterface {
  public:
   virtual ~CounterValueSetInterface() = default;
-  virtual void SetValue(const T &val) = 0;
+  virtual void SetValue(const T& val) = 0;
 };
 
 // Extended input interface of a counter. Adds methods to increment and
@@ -81,8 +79,8 @@
 class CounterValueIncrementInterface : public CounterValueSetInterface<T> {
  public:
   ~CounterValueIncrementInterface() override = default;
-  virtual void Increment(const T &val) = 0;
-  virtual void Decrement(const T &val) = 0;
+  virtual void Increment(const T& val) = 0;
+  virtual void Decrement(const T& val) = 0;
 };
 
 }  // namespace generic
diff --git a/mpact/sim/generic/data_buffer.cc b/mpact/sim/generic/data_buffer.cc
index 58cd2f5..5482a56 100644
--- a/mpact/sim/generic/data_buffer.cc
+++ b/mpact/sim/generic/data_buffer.cc
@@ -40,8 +40,8 @@
 
 // Allocate a DataBuffer and then copy the value of the source DB into
 // the newly allocated buffer.
-DataBuffer *DataBufferFactory::MakeCopyOf(const DataBuffer *src_db) {
-  DataBuffer *db = Allocate(src_db->size<uint8_t>());
+DataBuffer* DataBufferFactory::MakeCopyOf(const DataBuffer* src_db) {
+  DataBuffer* db = Allocate(src_db->size<uint8_t>());
   db->CopyFrom(src_db);
   return db;
 }
@@ -49,10 +49,10 @@
 DataBuffer::DataBuffer(unsigned size) : size_(size) {
   // Allocate using unsigned char to guarantee appropriate alignment according
   // to C++ standard 5.3.4 (11).
-  raw_ptr_ = static_cast<void *>(new unsigned char[size_]);
+  raw_ptr_ = static_cast<void*>(new unsigned char[size_]);
 }
 
-DataBuffer::~DataBuffer() { delete[] static_cast<unsigned char *>(raw_ptr_); }
+DataBuffer::~DataBuffer() { delete[] static_cast<unsigned char*>(raw_ptr_); }
 
 void DataBuffer::Submit(int latency) {
   if (destination_ == nullptr) {
diff --git a/mpact/sim/generic/data_buffer.h b/mpact/sim/generic/data_buffer.h
index a2c70ae..e06dcf4 100644
--- a/mpact/sim/generic/data_buffer.h
+++ b/mpact/sim/generic/data_buffer.h
@@ -62,19 +62,19 @@
   // Allocates a DataBuffer instance with a buffer size of num instances of T.
   // The free list is searched before falling back on using new.
   template <typename T>
-  DataBuffer *Allocate(int num) {
+  DataBuffer* Allocate(int num) {
     return Allocate(sizeof(T) * num);
   }
 
   // Allocates a DataBuffer instance with a buffer of size bytes. The free
   // list is searched before falling back on using new.
-  inline DataBuffer *Allocate(int size);
+  inline DataBuffer* Allocate(int size);
 
   // Allocates a new DataBuffer instance with the same size as db and
   // initializes the contents of the internal buffer to the value of that of
   // db - without changing db. Except for the memcpy this method acts just like
   // Allocate()
-  DataBuffer *MakeCopyOf(const DataBuffer *src_db);
+  DataBuffer* MakeCopyOf(const DataBuffer* src_db);
 
   // Clears and frees up all the objects contained in the DBStore that holds
   // the recycled DataBuffers.
@@ -83,15 +83,15 @@
  private:
   // Moves the DataBuffer instance on to a free list based on the size of the
   // internal buffer. This method is only called by DataBuffere instances.
-  inline void Recycle(DataBuffer *db);
+  inline void Recycle(DataBuffer* db);
   // The DBStore keeps free DataBuffer instances in free lists by size of
   // the data_ store. That way runtime overhead is reduced, since DataBuffer
   // objects are allocated very frequently.
   //
   // map <size of data buffer data_, list of free data buffers >
-  using DataBufferFreeList = absl::btree_map<int, std::vector<DataBuffer *>>;
+  using DataBufferFreeList = absl::btree_map<int, std::vector<DataBuffer*>>;
 
-  std::vector<DataBuffer *> short_free_list_[kShortSize + 1];
+  std::vector<DataBuffer*> short_free_list_[kShortSize + 1];
   DataBufferFreeList free_list_;
 };
 
@@ -103,7 +103,7 @@
 
 class DataBufferDestination {
  public:
-  virtual void SetDataBuffer(DataBuffer *db) = 0;
+  virtual void SetDataBuffer(DataBuffer* db) = 0;
   virtual ~DataBufferDestination() = default;
 };
 
@@ -153,15 +153,15 @@
   template <typename ElementType>
   inline void Set(int index, ElementType value) {
     ABSL_HARDENING_ASSERT((index + 1) * sizeof(ElementType) <= size_);
-    reinterpret_cast<ElementType *>(raw_ptr_)[index] = value;
+    reinterpret_cast<ElementType*>(raw_ptr_)[index] = value;
   }
 
   // Set entry using a span.
   template <typename ElementType>
   inline void Set(absl::Span<const ElementType> values) {
     ABSL_HARDENING_ASSERT(values.size() * sizeof(ElementType) <= size_);
-    auto *data_ptr = reinterpret_cast<ElementType *>(raw_ptr_);
-    for (auto const &value : values) {
+    auto* data_ptr = reinterpret_cast<ElementType*>(raw_ptr_);
+    for (auto const& value : values) {
       *data_ptr++ = value;
     }
   }
@@ -170,7 +170,7 @@
   template <typename ElementType>
   inline void SetSubmit(int index, ElementType value) {
     ABSL_HARDENING_ASSERT((index + 1) * sizeof(ElementType) <= size_);
-    reinterpret_cast<ElementType *>(raw_ptr_)[index] = value;
+    reinterpret_cast<ElementType*>(raw_ptr_)[index] = value;
     Submit(latency_);
   }
 
@@ -178,8 +178,8 @@
   template <typename ElementType>
   inline void SetSubmit(absl::Span<const ElementType> values) {
     ABSL_HARDENING_ASSERT(values.size() * sizeof(ElementType) <= size_);
-    auto *data_ptr = reinterpret_cast<ElementType *>(raw_ptr_);
-    for (auto const &value : values) {
+    auto* data_ptr = reinterpret_cast<ElementType*>(raw_ptr_);
+    for (auto const& value : values) {
       *data_ptr++ = value;
     }
     Submit(latency_);
@@ -190,7 +190,7 @@
   template <typename ElementType>
   inline ElementType Get(unsigned index) const {
     ABSL_HARDENING_ASSERT((index + 1) * sizeof(ElementType) <= size_);
-    return reinterpret_cast<ElementType *>(raw_ptr_)[index];
+    return reinterpret_cast<ElementType*>(raw_ptr_)[index];
   }
 
   template <int N>
@@ -202,27 +202,27 @@
   // Return the data buffer as a span of elements of type ElementType.
   template <typename ElementType>
   inline absl::Span<ElementType> Get() const {
-    return absl::MakeSpan(reinterpret_cast<ElementType *>(raw_ptr_),
+    return absl::MakeSpan(reinterpret_cast<ElementType*>(raw_ptr_),
                           size<ElementType>());
   }
 
   // Copies the content of the data buffer to the buffer stored at the
   // given location. The caller is responsible for ensuring that the
   // target buffer is of sufficient size.
-  inline void CopyTo(uint8_t *data) const {
+  inline void CopyTo(uint8_t* data) const {
     std::memcpy(data, raw_ptr_, size_);
   }
 
   // Copies the content of the data stored at the given location into
   // the data buffer. The caller is responsible for ensuring that the
   // source buffer is of sufficient size.
-  inline void CopyFrom(const uint8_t *data) {
+  inline void CopyFrom(const uint8_t* data) {
     std::memcpy(raw_ptr_, data, size_);
   }
 
   // Copies the data from the given data buffer. The sizes have to be
   // identical.
-  inline void CopyFrom(const DataBuffer *src_db) {
+  inline void CopyFrom(const DataBuffer* src_db) {
     ABSL_HARDENING_ASSERT(size_ == src_db->size_);
     std::memcpy(raw_ptr_, src_db->raw_ptr_, size_);
   }
@@ -255,26 +255,26 @@
 
   // Sets the destination state object that will receive the data buffer upon
   // Submit(0)/0 latency, or after latency cycles from a "delay line".
-  inline void set_destination(DataBufferDestination *dest) {
+  inline void set_destination(DataBufferDestination* dest) {
     destination_ = dest;
   }
 
   // Sets the delay line to use for this data buffer when it's submitted with
   // a non-zero latency.
-  inline void set_delay_line(DataBufferDelayLine *delay_line) {
+  inline void set_delay_line(DataBufferDelayLine* delay_line) {
     delay_line_ = delay_line;
   }
   // Returns the raw byte pointer to the data buffer storage.
-  void *raw_ptr() const { return raw_ptr_; }
+  void* raw_ptr() const { return raw_ptr_; }
 
  private:
   explicit DataBuffer(unsigned size);
-  DataBufferFactory *db_factory_;
-  DataBufferDelayLine *delay_line_;
-  DataBufferDestination *destination_;
+  DataBufferFactory* db_factory_;
+  DataBufferDelayLine* delay_line_;
+  DataBufferDestination* destination_;
   int latency_;
   unsigned size_;
-  void *raw_ptr_;
+  void* raw_ptr_;
 };
 
 // DataBufferDelayRecord is used as the parameter for the DelayLine for
@@ -283,12 +283,12 @@
 class DataBufferDelayRecord {
  public:
   DataBufferDelayRecord() = delete;
-  DataBufferDelayRecord(const DataBufferDelayRecord &rhs) {
+  DataBufferDelayRecord(const DataBufferDelayRecord& rhs) {
     dest_ = rhs.dest_;
     data_buffer_ = rhs.data_buffer_;
     data_buffer_->IncRef();
   }
-  DataBufferDelayRecord(DataBuffer *data_buffer, DataBufferDestination *dest)
+  DataBufferDelayRecord(DataBuffer* data_buffer, DataBufferDestination* dest)
       : data_buffer_(data_buffer), dest_(dest) {}
   ~DataBufferDelayRecord() {
     if (data_buffer_ != nullptr) {
@@ -299,14 +299,14 @@
   void Apply() { dest_->SetDataBuffer(data_buffer_); }
 
  private:
-  DataBuffer *data_buffer_;
-  DataBufferDestination *dest_;
+  DataBuffer* data_buffer_;
+  DataBufferDestination* dest_;
 };
 
 // Put the DataBuffer into the db_store based on size of the data it can hold.
 // This method is only call from DataBuffer instance, so no need to check for
 // db == nullptr.
-inline void DataBufferFactory::Recycle(DataBuffer *db) {
+inline void DataBufferFactory::Recycle(DataBuffer* db) {
   int size = db->size<uint8_t>();
   if (size <= kShortSize) {
     short_free_list_[size].push_back(db);
@@ -316,17 +316,17 @@
       ptr->second.push_back(db);
       return;
     }
-    free_list_.emplace(size, std::vector<DataBuffer *>{db});
+    free_list_.emplace(size, std::vector<DataBuffer*>{db});
   }
 }
 
 // Search through the DataBuffer recycled store to see if there is a buffer
 // of the appropriate size. If not, allocate a new one.
-inline DataBuffer *DataBufferFactory::Allocate(int size) {
-  DataBuffer *db = nullptr;
+inline DataBuffer* DataBufferFactory::Allocate(int size) {
+  DataBuffer* db = nullptr;
   {
     if (size <= kShortSize) {
-      auto &free_list = short_free_list_[size];
+      auto& free_list = short_free_list_[size];
       if (!free_list.empty()) {
         db = free_list.back();
         free_list.pop_back();
diff --git a/mpact/sim/generic/debug_command_shell_interface.h b/mpact/sim/generic/debug_command_shell_interface.h
index 46689c0..528d6bd 100644
--- a/mpact/sim/generic/debug_command_shell_interface.h
+++ b/mpact/sim/generic/debug_command_shell_interface.h
@@ -30,9 +30,9 @@
 
   // Each core must provide the debug interface and the elf loader.
   struct CoreAccess {
-    CoreDebugInterface *debug_interface = nullptr;
-    std::function<util::ElfProgramLoader *()> loader_getter;
-    ArchState *state = nullptr;
+    CoreDebugInterface* debug_interface = nullptr;
+    std::function<util::ElfProgramLoader*()> loader_getter;
+    ArchState* state = nullptr;
     absl::btree_map<int, uint64_t> breakpoint_map;
     int breakpoint_index = 0;
     absl::btree_map<int, WatchpointInfo> watchpoint_map;
@@ -48,11 +48,11 @@
   // any error while executing the command, in which case the output string
   // should be set to an appropriate error message.
   using CommandFunction = absl::AnyInvocable<bool(
-      absl::string_view, const CoreAccess &, std::string &)>;
+      absl::string_view, const CoreAccess&, std::string&)>;
 
   // Add core access to the system.
-  virtual void AddCore(const CoreAccess &core_access) = 0;
-  virtual void AddCores(const std::vector<CoreAccess> &core_access) = 0;
+  virtual void AddCore(const CoreAccess& core_access) = 0;
+  virtual void AddCores(const std::vector<CoreAccess>& core_access) = 0;
 
   // This adds a custom command to the command interpreter. Usage will be added
   // to the standard command usage. The callable will be called before the
@@ -62,7 +62,7 @@
 
   // The run method is the command interpreter. It parses the command strings,
   // executes the corresponding commands, displays results and error messages.
-  virtual void Run(std::istream &is, std::ostream &os) = 0;
+  virtual void Run(std::istream& is, std::ostream& os) = 0;
 };
 
 }  // namespace mpact::sim::generic
diff --git a/mpact/sim/generic/decode_cache.cc b/mpact/sim/generic/decode_cache.cc
index b452b3c..bbb9a6e 100644
--- a/mpact/sim/generic/decode_cache.cc
+++ b/mpact/sim/generic/decode_cache.cc
@@ -17,13 +17,15 @@
 #include <cstdint>
 
 #include "absl/numeric/bits.h"
+#include "mpact/sim/generic/decoder_interface.h"
+#include "mpact/sim/generic/instruction.h"
 
 namespace mpact {
 namespace sim {
 namespace generic {
 
-DecodeCache::DecodeCache(const DecodeCacheProperties &props,
-                         DecoderInterface *decoder)
+DecodeCache::DecodeCache(const DecodeCacheProperties& props,
+                         DecoderInterface* decoder)
     : decoder_(decoder), instruction_cache_(nullptr) {
   num_entries_ = absl::bit_ceil(props.num_entries);
   address_shift_ =
@@ -36,7 +38,7 @@
   }
   address_mask_ = (num_entries_ - 1) << address_shift_;
 
-  instruction_cache_ = new Instruction *[num_entries_];
+  instruction_cache_ = new Instruction*[num_entries_];
   if (nullptr == instruction_cache_) {
     // memory allocation failed
     return;
@@ -53,9 +55,9 @@
   instruction_cache_ = nullptr;
 }
 
-DecodeCache *DecodeCache::Create(const DecodeCacheProperties &props,
-                                 DecoderInterface *decoder) {
-  DecodeCache *dc = new DecodeCache(props, decoder);
+DecodeCache* DecodeCache::Create(const DecodeCacheProperties& props,
+                                 DecoderInterface* decoder) {
+  DecodeCache* dc = new DecodeCache(props, decoder);
   if (nullptr == dc->instruction_cache_) {
     delete dc;
     return nullptr;
@@ -63,20 +65,20 @@
   return dc;
 }
 
-Instruction *DecodeCache::GetDecodedInstruction(uint64_t address) {
+Instruction* DecodeCache::GetDecodedInstruction(uint64_t address) {
   // Verify that the instruction_cache_ was allocated
   if (nullptr == instruction_cache_) {
     return nullptr;
   }
 
   uint64_t indx = (address & address_mask_) >> address_shift_;
-  Instruction *inst = instruction_cache_[indx];
+  Instruction* inst = instruction_cache_[indx];
 
   if ((nullptr != inst) && (inst->address() == address)) {
     return inst;
   }
 
-  Instruction *new_inst = decoder_->DecodeInstruction(address);
+  Instruction* new_inst = decoder_->DecodeInstruction(address);
 
   if (nullptr == new_inst) {
     return nullptr;
@@ -93,7 +95,7 @@
 
 void DecodeCache::Invalidate(uint64_t address) {
   uint64_t entry = (address & address_mask_) >> address_shift_;
-  Instruction *inst = instruction_cache_[entry];
+  Instruction* inst = instruction_cache_[entry];
   if ((nullptr != inst) && (inst->address() == address)) {
     instruction_cache_[entry]->DecRef();
     instruction_cache_[entry] = nullptr;
diff --git a/mpact/sim/generic/decode_cache.h b/mpact/sim/generic/decode_cache.h
index 7fd1189..d87cd6a 100644
--- a/mpact/sim/generic/decode_cache.h
+++ b/mpact/sim/generic/decode_cache.h
@@ -57,7 +57,7 @@
 class DecodeCache {
  private:
   // Constructed using static factory method.
-  DecodeCache(const DecodeCacheProperties &props, DecoderInterface *decoder);
+  DecodeCache(const DecodeCacheProperties& props, DecoderInterface* decoder);
 
  public:
   DecodeCache() = delete;
@@ -65,12 +65,12 @@
   // The DecodeCache factory method takes the property struct and the interface
   // to a decoder that will supply an instruction internal representation for
   // a given address. If memory allocation fails it returns nullptr.
-  static DecodeCache *Create(const DecodeCacheProperties &props,
-                             DecoderInterface *decoder);
+  static DecodeCache* Create(const DecodeCacheProperties& props,
+                             DecoderInterface* decoder);
   // Returns the decoded instruction associated with the given address. If there
   // is not an instruction with that address in the decode cache, the decoder
   // will be called and the newly decoded instruction will be cached.
-  Instruction *GetDecodedInstruction(uint64_t address);
+  Instruction* GetDecodedInstruction(uint64_t address);
   // Invalidation operations
   // These methods cases the removal from the cache of the instruction
   // internal represenations that match the address, address range [start, end),
@@ -87,12 +87,12 @@
   int address_inc() const { return address_inc_; }
 
  private:
-  DecoderInterface *decoder_;
+  DecoderInterface* decoder_;
   int num_entries_;
   int address_shift_;
   uint32_t address_inc_;
   uint64_t address_mask_;
-  Instruction **instruction_cache_;
+  Instruction** instruction_cache_;
 };
 
 }  // namespace generic
diff --git a/mpact/sim/generic/decoder_interface.h b/mpact/sim/generic/decoder_interface.h
index 86173eb..23eecae 100644
--- a/mpact/sim/generic/decoder_interface.h
+++ b/mpact/sim/generic/decoder_interface.h
@@ -30,9 +30,9 @@
   // in the instruction decoding, the decoder should still produce an
   // instruction that can be executed, but its semantic action function should
   // set an error condition in the simulation when executed.
-  virtual Instruction *DecodeInstruction(uint64_t address) = 0;
+  virtual Instruction* DecodeInstruction(uint64_t address) = 0;
   virtual int GetNumOpcodes() const = 0;
-  virtual const char *GetOpcodeName(int index) const = 0;
+  virtual const char* GetOpcodeName(int index) const = 0;
   virtual ~DecoderInterface() = default;
 };
 
diff --git a/mpact/sim/generic/delay_line.h b/mpact/sim/generic/delay_line.h
index f8cfa9d..ceaf6d7 100644
--- a/mpact/sim/generic/delay_line.h
+++ b/mpact/sim/generic/delay_line.h
@@ -15,6 +15,7 @@
 #ifndef MPACT_SIM_GENERIC_DELAY_LINE_H_
 #define MPACT_SIM_GENERIC_DELAY_LINE_H_
 
+#include <cstdint>
 #include <vector>
 
 /* Commented out for now. Not currently using threads.
@@ -101,7 +102,7 @@
   int Advance() override /*ABSL_LOCKS_EXCLUDED(delay_line_lock_)*/ {
     // absl::MutexLock dl(&delay_line_lock_);
     current_ = (current_ + 1) & mask_;
-    for (auto &rec : delay_line_[current_]) {
+    for (auto& rec : delay_line_[current_]) {
       rec.Apply();
       num_entries_--;
     }
diff --git a/mpact/sim/generic/devnull_operand.h b/mpact/sim/generic/devnull_operand.h
index 4cd43eb..e61b9f9 100644
--- a/mpact/sim/generic/devnull_operand.h
+++ b/mpact/sim/generic/devnull_operand.h
@@ -39,7 +39,7 @@
  public:
   // Constructor requires machine state to access data buffer factory, and
   // shape to allocate the correct size.
-  DevNullOperand(ArchState *state, const std::vector<int> &shape,
+  DevNullOperand(ArchState* state, const std::vector<int>& shape,
                  absl::string_view string_value)
       : db_factory_(state->db_factory()),
         shape_(shape),
@@ -49,24 +49,24 @@
       size_ *= sz;
     }
   }
-  DevNullOperand(ArchState *state, const std::vector<int> &shape)
+  DevNullOperand(ArchState* state, const std::vector<int>& shape)
       : DevNullOperand(state, shape, "") {}
   DevNullOperand() = delete;
   // Allocates a data buffer of the correct size, but initializes it with a
   // null destination.
-  DataBuffer *AllocateDataBuffer() override {
-    DataBuffer *db = db_factory_->Allocate(size_);
+  DataBuffer* AllocateDataBuffer() override {
+    DataBuffer* db = db_factory_->Allocate(size_);
     InitializeDataBuffer(db);
     return db;
   }
   // Initializes the data buffer with null attributes.
-  void InitializeDataBuffer(DataBuffer *db) override {
+  void InitializeDataBuffer(DataBuffer* db) override {
     db->set_destination(nullptr);
     db->set_latency(0);
     db->set_delay_line(nullptr);
   }
   // Just call AllocateDataBuffer, as there is no underlying state item.
-  DataBuffer *CopyDataBuffer() override { return AllocateDataBuffer(); }
+  DataBuffer* CopyDataBuffer() override { return AllocateDataBuffer(); }
   // Zero latency always.
   int latency() const override { return 0; }
   // No object to return.
@@ -77,7 +77,7 @@
   std::string AsString() const override { return string_value_; }
 
  private:
-  DataBufferFactory *db_factory_;
+  DataBufferFactory* db_factory_;
   std::vector<int> shape_;
   int size_;
   std::string string_value_;
diff --git a/mpact/sim/generic/fifo.cc b/mpact/sim/generic/fifo.cc
index ee22930..b0e5d39 100644
--- a/mpact/sim/generic/fifo.cc
+++ b/mpact/sim/generic/fifo.cc
@@ -28,8 +28,8 @@
 namespace sim {
 namespace generic {
 
-FifoBase::FifoBase(class ArchState *arch_state, absl::string_view name,
-                   const std::vector<int> &shape, int element_size,
+FifoBase::FifoBase(class ArchState* arch_state, absl::string_view name,
+                   const std::vector<int>& shape, int element_size,
                    int default_capacity)
     : StateItemBase(arch_state, name, shape, element_size),
       Component(std::string(name), arch_state),
@@ -58,7 +58,7 @@
 
 void FifoBase::Reserve(int count) { reserved_ += count; }
 
-bool FifoBase::Push(DataBuffer *db) {
+bool FifoBase::Push(DataBuffer* db) {
   // If any slots are reserved, decrement first before checking for full.
   if (reserved_ > 0) {
     reserved_--;
@@ -86,7 +86,7 @@
   fifo_.pop_front();
 }
 
-DataBuffer *FifoBase::Front() const {
+DataBuffer* FifoBase::Front() const {
   if (fifo_.empty()) {
     if (nullptr != underflow_program_error_) {
       underflow_program_error_->Raise("Underflow in fifo " + name_);
@@ -99,10 +99,10 @@
 
 unsigned FifoBase::Available() const { return fifo_.size(); }
 
-void FifoBase::SetDataBuffer(DataBuffer *db) { Push(db); }
+void FifoBase::SetDataBuffer(DataBuffer* db) { Push(db); }
 
 absl::Status FifoBase::ImportSelf(
-    const mpact::sim::proto::ComponentData &component_data) {
+    const mpact::sim::proto::ComponentData& component_data) {
   auto status = Component::ImportSelf(component_data);
   if (!status.ok()) return status;
   capacity_ = depth_.GetValue();
diff --git a/mpact/sim/generic/fifo.h b/mpact/sim/generic/fifo.h
index 35cd9a8..963b356 100644
--- a/mpact/sim/generic/fifo.h
+++ b/mpact/sim/generic/fifo.h
@@ -49,8 +49,8 @@
 class FifoSourceOperand : public SourceOperandInterface {
  public:
   // Constructor. Note, default constructor deleted.
-  explicit FifoSourceOperand(FifoBase *fifo);
-  FifoSourceOperand(FifoBase *fifo, const std::string op_name);
+  explicit FifoSourceOperand(FifoBase* fifo);
+  FifoSourceOperand(FifoBase* fifo, const std::string op_name);
   FifoSourceOperand() = delete;
 
   // These accessor methods are defined to satisfy the interface. However,
@@ -80,7 +80,7 @@
   std::string AsString() const override { return op_name_; }
 
  private:
-  FifoBase *fifo_;
+  FifoBase* fifo_;
   std::string op_name_;
 };
 
@@ -91,22 +91,22 @@
 class FifoDestinationOperand : public DestinationOperandInterface {
  public:
   // Constructors
-  FifoDestinationOperand(FifoBase *fifo, int latency, std::string op_name);
-  FifoDestinationOperand(FifoBase *fifo, int latency);
+  FifoDestinationOperand(FifoBase* fifo, int latency, std::string op_name);
+  FifoDestinationOperand(FifoBase* fifo, int latency);
   FifoDestinationOperand() = delete;
 
   // Initializes the DataBuffer instance so that when Submit is called, it can
   // be entered into the correct delay line, with the correct latency, targeting
   // the correct fifo.
-  void InitializeDataBuffer(DataBuffer *db) override;
+  void InitializeDataBuffer(DataBuffer* db) override;
 
   // Since a fifo stores multiple values, this method will return a nullptr
   // as it does not make sense to copy the value from a fifo into a destination
   // DataBuffer instance that is destined for that fifo.
-  DataBuffer *CopyDataBuffer() override { return nullptr; }
+  DataBuffer* CopyDataBuffer() override { return nullptr; }
 
   // Allocates and returns an initialized DataBuffer instance.
-  DataBuffer *AllocateDataBuffer() override;
+  DataBuffer* AllocateDataBuffer() override;
 
   // Returns the FifoBase object wrapped in absl::any.
   std::any GetObject() const override { return std::any(fifo_); }
@@ -122,10 +122,10 @@
   std::string AsString() const override { return op_name_; }
 
  private:
-  FifoBase *fifo_;
-  DataBufferFactory *db_factory_;
+  FifoBase* fifo_;
+  DataBufferFactory* db_factory_;
   int latency_;
-  DataBufferDelayLine *delay_line_;
+  DataBufferDelayLine* delay_line_;
   std::string op_name_;
 };
 
@@ -141,18 +141,18 @@
 class FifoBase : public StateItemBase, public Component {
   // Only constructed from derived classes.
  protected:
-  FifoBase(class ArchState *arch_state, absl::string_view name,
-           const std::vector<int> &shape, int element_size,
+  FifoBase(class ArchState* arch_state, absl::string_view name,
+           const std::vector<int>& shape, int element_size,
            int default_capacity);
   FifoBase() = delete;
-  FifoBase(const FifoBase &) = delete;
+  FifoBase(const FifoBase&) = delete;
 
  public:
   ~FifoBase() override;
 
  public:
   // Pushes the DataBuffer to the fifo provided there is space available.
-  void SetDataBuffer(DataBuffer *db) override;
+  void SetDataBuffer(DataBuffer* db) override;
 
   // Returns true if the count of reserved and full slots equals or exceeds
   // fifo capacity.
@@ -177,12 +177,12 @@
   // is greater than zero it will decrement the reserved count. If the push
   // would overflow the fifo it returns false, and raises the overflow program
   // error if set.
-  virtual bool Push(DataBuffer *db);
+  virtual bool Push(DataBuffer* db);
 
   // Returns a pointer to the DataBuffer at the front of the fifo. If the fifo
   // is empty, the nullptr is returned and the underflow program error, if set,
   // is raised.
-  DataBuffer *Front() const;
+  DataBuffer* Front() const;
 
   // Removes the front element of the fifo and decrements its reference count.
   // If the fifo is empty, the underflow program error, if set, is raised.
@@ -198,23 +198,23 @@
   unsigned Reserved() const { return reserved_; }
 
   // Setters for ProgramErrors
-  void SetOverflowProgramError(std::unique_ptr<ProgramError> *program_error) {
+  void SetOverflowProgramError(std::unique_ptr<ProgramError>* program_error) {
     overflow_program_error_ = std::move(*program_error);
   }
 
-  void SetUnderflowProgramError(std::unique_ptr<ProgramError> *program_error) {
+  void SetUnderflowProgramError(std::unique_ptr<ProgramError>* program_error) {
     underflow_program_error_ = std::move(*program_error);
   }
 
  protected:
   // Configuration import.
   absl::Status ImportSelf(
-      const mpact::sim::proto::ComponentData &component_data) override;
+      const mpact::sim::proto::ComponentData& component_data) override;
 
-  ProgramError *overflow_program_error() {
+  ProgramError* overflow_program_error() {
     return overflow_program_error_.get();
   }
-  ProgramError *underflow_program_error() {
+  ProgramError* underflow_program_error() {
     return underflow_program_error_.get();
   }
 
@@ -225,7 +225,7 @@
   std::string name_;
   unsigned capacity_;
   unsigned reserved_;
-  std::deque<DataBuffer *> fifo_;
+  std::deque<DataBuffer*> fifo_;
 };
 
 // Scalar valued fifo with value type ElementType.
@@ -260,11 +260,10 @@
     typename std::enable_if<!std::is_integral<T>::value, void>::type;
 
 // Helper function used in the partial specialization below.
-template <
-    typename F, typename T,
-    typename std::enable_if<std::is_signed<T>::value, T>::type * = nullptr>
-inline T HelperAs(const FifoBase *fifo, int i) {
-  DataBuffer *db = fifo->Front();
+template <typename F, typename T,
+          typename std::enable_if<std::is_signed<T>::value, T>::type* = nullptr>
+inline T HelperAs(const FifoBase* fifo, int i) {
+  DataBuffer* db = fifo->Front();
   if (nullptr == db) {
     return static_cast<T>(0);
   }
@@ -274,9 +273,9 @@
 
 template <
     typename F, typename T,
-    typename std::enable_if<std::is_unsigned<T>::value, T>::type * = nullptr>
-inline T HelperAs(const FifoBase *fifo, int i) {
-  DataBuffer *db = fifo->Front();
+    typename std::enable_if<std::is_unsigned<T>::value, T>::type* = nullptr>
+inline T HelperAs(const FifoBase* fifo, int i) {
+  DataBuffer* db = fifo->Front();
   if (nullptr == db) {
     return static_cast<T>(0);
   }
@@ -285,12 +284,12 @@
 }
 
 template <typename T, typename Enable>
-FifoSourceOperand<T, Enable>::FifoSourceOperand(FifoBase *fifo,
+FifoSourceOperand<T, Enable>::FifoSourceOperand(FifoBase* fifo,
                                                 const std::string op_name)
     : fifo_(fifo), op_name_(op_name) {}
 
 template <typename T, typename Enable>
-FifoSourceOperand<T, Enable>::FifoSourceOperand(FifoBase *fifo)
+FifoSourceOperand<T, Enable>::FifoSourceOperand(FifoBase* fifo)
     : FifoSourceOperand(fifo, fifo->name()) {}
 
 template <typename T>
@@ -298,9 +297,9 @@
     : public SourceOperandInterface {
  public:
   // Constructors. Note, default constructor deleted.
-  FifoSourceOperand(FifoBase *fifo, const std::string op_name)
+  FifoSourceOperand(FifoBase* fifo, const std::string op_name)
       : fifo_(fifo), op_name_(op_name) {}
-  explicit FifoSourceOperand(FifoBase *fifo)
+  explicit FifoSourceOperand(FifoBase* fifo)
       : FifoSourceOperand(fifo, fifo->name()) {}
   FifoSourceOperand() = delete;
 
@@ -331,7 +330,7 @@
   std::string AsString() const override { return op_name_; }
 
  private:
-  FifoBase *fifo_;
+  FifoBase* fifo_;
   std::string op_name_;
 };
 
@@ -347,9 +346,9 @@
     : public SourceOperandInterface {
  public:
   // Constructors. Note, default constructor deleted.
-  FifoSourceOperand(FifoBase *fifo, const std::string op_name)
+  FifoSourceOperand(FifoBase* fifo, const std::string op_name)
       : fifo_(fifo), op_name_(op_name) {}
-  explicit FifoSourceOperand(FifoBase *fifo)
+  explicit FifoSourceOperand(FifoBase* fifo)
       : FifoSourceOperand(fifo, fifo->name()) {}
   FifoSourceOperand() = delete;
 
@@ -373,12 +372,12 @@
   std::vector<int> shape() const override { return fifo_->shape(); }
 
  private:
-  FifoBase *fifo_;
+  FifoBase* fifo_;
   std::string op_name_;
 };
 
 template <typename T>
-FifoDestinationOperand<T>::FifoDestinationOperand(FifoBase *fifo, int latency,
+FifoDestinationOperand<T>::FifoDestinationOperand(FifoBase* fifo, int latency,
                                                   std::string op_name)
     : fifo_(fifo),
       db_factory_(fifo->arch_state()->db_factory()),
@@ -387,19 +386,19 @@
       op_name_(op_name) {}
 
 template <typename T>
-FifoDestinationOperand<T>::FifoDestinationOperand(FifoBase *fifo, int latency)
+FifoDestinationOperand<T>::FifoDestinationOperand(FifoBase* fifo, int latency)
     : FifoDestinationOperand(fifo, latency, fifo->name()) {}
 
 template <typename T>
-void FifoDestinationOperand<T>::InitializeDataBuffer(DataBuffer *db) {
+void FifoDestinationOperand<T>::InitializeDataBuffer(DataBuffer* db) {
   db->set_destination(fifo_);
   db->set_latency(latency_);
   db->set_delay_line(delay_line_);
 }
 
 template <typename T>
-DataBuffer *FifoDestinationOperand<T>::AllocateDataBuffer() {
-  DataBuffer *db = db_factory_->Allocate(fifo_->size());
+DataBuffer* FifoDestinationOperand<T>::AllocateDataBuffer() {
+  DataBuffer* db = db_factory_->Allocate(fifo_->size());
   InitializeDataBuffer(db);
   return db;
 }
diff --git a/mpact/sim/generic/fifo_with_notify.cc b/mpact/sim/generic/fifo_with_notify.cc
index 1493da2..a4e1db6 100644
--- a/mpact/sim/generic/fifo_with_notify.cc
+++ b/mpact/sim/generic/fifo_with_notify.cc
@@ -16,13 +16,16 @@
 
 #include <utility>
 
+#include "mpact/sim/generic/data_buffer.h"
+#include "mpact/sim/generic/fifo.h"
+
 namespace mpact {
 namespace sim {
 namespace generic {
 
 // Call base class Push. Only call the on_not_empty callback if the fifo is
 // empty prior to pushing.
-bool FifoWithNotifyBase::Push(DataBuffer *db) {
+bool FifoWithNotifyBase::Push(DataBuffer* db) {
   if (!IsEmpty()) return FifoBase::Push(db);
 
   auto res = FifoBase::Push(db);
diff --git a/mpact/sim/generic/fifo_with_notify.h b/mpact/sim/generic/fifo_with_notify.h
index fb3b27d..ef683c7 100644
--- a/mpact/sim/generic/fifo_with_notify.h
+++ b/mpact/sim/generic/fifo_with_notify.h
@@ -36,21 +36,21 @@
 class FifoWithNotifyBase : public FifoBase {
  protected:
   // Constructed from derived class (StateItem).
-  FifoWithNotifyBase(ArchState *arch_state, absl::string_view name,
-                     const std::vector<int> &shape, int element_size,
+  FifoWithNotifyBase(ArchState* arch_state, absl::string_view name,
+                     const std::vector<int>& shape, int element_size,
                      int default_capacity)
       : FifoBase(arch_state, name, shape, element_size, default_capacity) {}
   FifoWithNotifyBase() = delete;
-  FifoWithNotifyBase(const FifoWithNotifyBase &) = delete;
+  FifoWithNotifyBase(const FifoWithNotifyBase&) = delete;
 
  public:
-  using OnEventCallback = absl::AnyInvocable<void(FifoWithNotifyBase *)>;
+  using OnEventCallback = absl::AnyInvocable<void(FifoWithNotifyBase*)>;
 
   // SetDataBuffer and Pop are overridden to detect when the fifo transitions
   // from/to empty. The reason Push is not overrided is that Push moves the
   // data buffer into a delay line with a possible non-zero latency. That means
   // that the write doesn't actually occur into until SetDataBuffer is called.
-  bool Push(DataBuffer *) override;
+  bool Push(DataBuffer*) override;
   void Pop() override;
 
   // Set the transition callbacks functions. Pass in nullptr to clear an already
diff --git a/mpact/sim/generic/immediate_operand.h b/mpact/sim/generic/immediate_operand.h
index 4cb5f2b..55aa40b 100644
--- a/mpact/sim/generic/immediate_operand.h
+++ b/mpact/sim/generic/immediate_operand.h
@@ -20,6 +20,7 @@
 #include <string>
 #include <vector>
 
+#include "absl/base/macros.h"
 #include "mpact/sim/generic/operand_interface.h"
 
 namespace mpact {
@@ -36,9 +37,9 @@
       : value_(val), shape_({1}), as_string_(absl::StrCat(val)) {}
   ImmediateOperand(T val, std::string as_string)
       : value_(val), shape_({1}), as_string_(as_string) {}
-  ImmediateOperand(T val, const std::vector<int> &shape)
+  ImmediateOperand(T val, const std::vector<int>& shape)
       : value_(val), shape_(shape), as_string_(absl::StrCat(val)) {}
-  ImmediateOperand(T val, const std::vector<int> &shape, std::string as_string)
+  ImmediateOperand(T val, const std::vector<int>& shape, std::string as_string)
       : value_(val), shape_(shape), as_string_(as_string) {}
 
   // Methods for accessing the immediate value. Always returns the same
@@ -83,7 +84,7 @@
   explicit VectorImmediateOperand(std::vector<T> val) : value_(val) {
     shape_.push_back(value_.size());
   }
-  VectorImmediateOperand(std::vector<T> val, const std::vector<int> &shape)
+  VectorImmediateOperand(std::vector<T> val, const std::vector<int>& shape)
       : value_(val), shape_(shape) {
     ABSL_HARDENING_ASSERT((shape.size() == 1) && (shape[0] == val.size()));
   }
diff --git a/mpact/sim/generic/instruction.cc b/mpact/sim/generic/instruction.cc
index 79af44b..6ba87f4 100644
--- a/mpact/sim/generic/instruction.cc
+++ b/mpact/sim/generic/instruction.cc
@@ -18,13 +18,16 @@
 #include <cstring>
 #include <string>
 
-#include "mpact/sim/generic/resource_operand_interface.h"
+#include "absl/types/span.h"
+#include "mpact/sim/generic/arch_state.h"
+#include "mpact/sim/generic/operand_interface.h"
+#include "mpact/sim/generic/resource_operand_interface.h"  // IWYU pragma: keep
 
 namespace mpact {
 namespace sim {
 namespace generic {
 
-void Instruction::AppendChild(Instruction *inst) {
+void Instruction::AppendChild(Instruction* inst) {
   if (nullptr == inst) return;
   inst->parent_ = this;
   if (nullptr == child_) {
@@ -35,7 +38,7 @@
   }
 }
 
-void Instruction::Append(Instruction *inst) {
+void Instruction::Append(Instruction* inst) {
   if (nullptr == inst) return;
   if (nullptr == next_) {
     inst->IncRef();
@@ -45,23 +48,23 @@
   }
 }
 
-void Instruction::SetPredicate(PredicateOperandInterface *predicate) {
+void Instruction::SetPredicate(PredicateOperandInterface* predicate) {
   predicate_ = predicate;
 }
 
-void Instruction::AppendSource(SourceOperandInterface *op) {
+void Instruction::AppendSource(SourceOperandInterface* op) {
   sources_.push_back(op);
 }
 
 int Instruction::SourcesSize() const { return sources_.size(); }
 
-void Instruction::AppendDestination(DestinationOperandInterface *op) {
+void Instruction::AppendDestination(DestinationOperandInterface* op) {
   dests_.push_back(op);
 }
 
 int Instruction::DestinationsSize() const { return dests_.size(); }
 
-Instruction::Instruction(uint64_t address, ArchState *state)
+Instruction::Instruction(uint64_t address, ArchState* state)
     : predicate_(nullptr),
       address_(address),
       state_(state),
@@ -70,24 +73,24 @@
       parent_(nullptr),
       next_(nullptr) {}
 
-Instruction::Instruction(ArchState *state) : Instruction(0, state) {}
+Instruction::Instruction(ArchState* state) : Instruction(0, state) {}
 
 Instruction::~Instruction() {
   delete[] attribute_array_;
   delete predicate_;
-  for (auto *op : sources_) {
+  for (auto* op : sources_) {
     delete op;
   }
   sources_.clear();
-  for (auto *op : dests_) {
+  for (auto* op : dests_) {
     delete op;
   }
   dests_.clear();
-  for (auto *op : resource_hold_) {
+  for (auto* op : resource_hold_) {
     delete op;
   }
   resource_hold_.clear();
-  for (auto *op : resource_acquire_) {
+  for (auto* op : resource_acquire_) {
     delete op;
   }
   resource_acquire_.clear();
diff --git a/mpact/sim/generic/instruction.h b/mpact/sim/generic/instruction.h
index 8a553e7..b8606dc 100644
--- a/mpact/sim/generic/instruction.h
+++ b/mpact/sim/generic/instruction.h
@@ -87,22 +87,22 @@
 class Instruction : public ReferenceCount {
  public:
   // Type Alias for the semantic function.
-  using SemanticFunction = std::function<void(Instruction *)>;
+  using SemanticFunction = std::function<void(Instruction*)>;
 
   // Constructors and Destructors.
-  explicit Instruction(ArchState *state);
-  Instruction(uint64_t address, ArchState *state);
+  explicit Instruction(ArchState* state);
+  Instruction(uint64_t address, ArchState* state);
   ~Instruction() override;
 
   // Appends the instruction to the "next" list of instructions.
-  void Append(Instruction *inst);
+  void Append(Instruction* inst);
   // Appends the instruction the "child" list of instructions.
-  void AppendChild(Instruction *inst);
+  void AppendChild(Instruction* inst);
 
   // Methods used for navigating instruction hierarchy.
-  Instruction *child() const { return child_; }
-  Instruction *parent() const { return parent_; }
-  Instruction *next() const { return next_; }
+  Instruction* child() const { return child_; }
+  Instruction* parent() const { return parent_; }
+  Instruction* next() const { return next_; }
 
   // Execute the instruction with the given context
   // Note: The context is stored into the instruction instance instead of
@@ -113,7 +113,7 @@
   // only a handle to the Instruction instance as that is available during
   // instruction decode, and accessing the context otherwise would require
   // modifying the interface for all operands.
-  void Execute(ReferenceCount *context) {
+  void Execute(ReferenceCount* context) {
     context_ = context;
     semantic_fcn_(this);
     context_ = nullptr;
@@ -122,8 +122,8 @@
   void Execute() { semantic_fcn_(this); }
 
   // Accessors (getters/setters).
-  ReferenceCount *context() const { return context_; }
-  ArchState *state() const { return state_; }
+  ReferenceCount* context() const { return context_; }
+  ArchState* state() const { return state_; }
   // Returns the pc value for the instruction.
   uint64_t address() const { return address_; }
   // The address should seldom be set outside the constructor.
@@ -144,32 +144,32 @@
 
   // PredicateOperand interface used for those ISAs that implement
   // instruction predicates.
-  PredicateOperandInterface *Predicate() const { return predicate_; }
-  void SetPredicate(PredicateOperandInterface *predicate);
+  PredicateOperandInterface* Predicate() const { return predicate_; }
+  void SetPredicate(PredicateOperandInterface* predicate);
 
   // SourceOperand interfaces for the instruction.
-  SourceOperandInterface *Source(int i) const { return sources_[i]; }
-  void AppendSource(SourceOperandInterface *op);
+  SourceOperandInterface* Source(int i) const { return sources_[i]; }
+  void AppendSource(SourceOperandInterface* op);
   int SourcesSize() const;
 
   // DestinationOperand interfaces for the instruction.
-  DestinationOperandInterface *Destination(int i) const { return dests_[i]; }
-  void AppendDestination(DestinationOperandInterface *op);
+  DestinationOperandInterface* Destination(int i) const { return dests_[i]; }
+  void AppendDestination(DestinationOperandInterface* op);
   int DestinationsSize() const;
 
   // Hold ResourceOperand interfaces for the instruction.
-  inline std::vector<ResourceOperandInterface *> &ResourceHold() {
+  inline std::vector<ResourceOperandInterface*>& ResourceHold() {
     return resource_hold_;
   }
-  inline void AppendResourceHold(ResourceOperandInterface *op) {
+  inline void AppendResourceHold(ResourceOperandInterface* op) {
     resource_hold_.push_back(op);
   }
 
   // Acquire ResourceOperand interfaces for the instruction.
-  inline std::vector<ResourceOperandInterface *> &ResourceAcquire() {
+  inline std::vector<ResourceOperandInterface*>& ResourceAcquire() {
     return resource_acquire_;
   }
-  inline void AppendResourceAcquire(ResourceOperandInterface *op) {
+  inline void AppendResourceAcquire(ResourceOperandInterface* op) {
     resource_acquire_.push_back(op);
   }
 
@@ -186,19 +186,19 @@
 
  private:
   // Instruction operands.
-  PredicateOperandInterface *predicate_ = nullptr;
-  std::vector<SourceOperandInterface *> sources_;
-  std::vector<DestinationOperandInterface *> dests_;
+  PredicateOperandInterface* predicate_ = nullptr;
+  std::vector<SourceOperandInterface*> sources_;
+  std::vector<DestinationOperandInterface*> dests_;
 
   // The resources that must be available in order to issue the instruction.
   // This includes any registers that are read.
-  std::vector<ResourceOperandInterface *> resource_hold_;
+  std::vector<ResourceOperandInterface*> resource_hold_;
   // The resources that must be reserved/acquired by the instruction. Each
   // vector element is a set of resources that are acquired when the instruction
   // issues. The method Acquire() should be called on each element of the
   // vector. The operands should contain all registers and other resources that
   // that need to be reserved for writing.
-  std::vector<ResourceOperandInterface *> resource_acquire_;
+  std::vector<ResourceOperandInterface*> resource_acquire_;
   // Simulated instruction size.
   int size_;
   // Simulated instruction address.
@@ -214,24 +214,24 @@
   // privilege level, or whether the instruction is a branch or not.
   // The attribute array is owned by the Instruction object. The attributes are
   // accessed as a const span, so the attributes are read only.
-  int *attribute_array_ = nullptr;
+  int* attribute_array_ = nullptr;
   absl::Span<const int> attributes_ =
-      absl::MakeConstSpan(static_cast<int *>(nullptr), 0);
+      absl::MakeConstSpan(static_cast<int*>(nullptr), 0);
   // Architecture state object.
-  ArchState *state_;
+  ArchState* state_;
   // Instruction execution context (this is usuall nullptr).
-  ReferenceCount *context_;
+  ReferenceCount* context_;
   // Semantic function that implements the instruction semantics.
   SemanticFunction semantic_fcn_;
   // Pointer to the child (or sub) instruction. Used to break an instruction
   // up into multiple semantic actions, such as a VLIW instruction.
-  Instruction *child_;
+  Instruction* child_;
   // Parent instruction pointer from child instruction.
-  Instruction *parent_;
+  Instruction* parent_;
   // Pointer to the "next" instruction (instructions can be linked into a list
   // of instructions), such as those instances that make up the instructions in
   // a VLIW instruction word.
-  Instruction *next_;
+  Instruction* next_;
 };
 
 // Templated inline helper functions for operand access. These are intended to
@@ -240,75 +240,75 @@
 
 // The base case shouldn't be matched. No return statement is provided.
 template <typename T>
-inline T GetInstructionSource(const Instruction *inst, int index) { /*empty */ }
+inline T GetInstructionSource(const Instruction* inst, int index) { /*empty */ }
 
 // The following provide specializations for each of the integral types of
 // operand values, both signed and unsigned.
 template <>
-inline bool GetInstructionSource<bool>(const Instruction *inst, int index) {
+inline bool GetInstructionSource<bool>(const Instruction* inst, int index) {
   return inst->Source(index)->AsBool(0);
 }
 template <>
-inline uint8_t GetInstructionSource<uint8_t>(const Instruction *inst,
+inline uint8_t GetInstructionSource<uint8_t>(const Instruction* inst,
                                              int index) {
   return inst->Source(index)->AsUint8(0);
 }
 template <>
-inline int8_t GetInstructionSource<int8_t>(const Instruction *inst, int index) {
+inline int8_t GetInstructionSource<int8_t>(const Instruction* inst, int index) {
   return inst->Source(index)->AsInt8(0);
 }
 template <>
-inline uint16_t GetInstructionSource<uint16_t>(const Instruction *inst,
+inline uint16_t GetInstructionSource<uint16_t>(const Instruction* inst,
                                                int index) {
   return inst->Source(index)->AsUint16(0);
 }
 template <>
-inline int16_t GetInstructionSource<int16_t>(const Instruction *inst,
+inline int16_t GetInstructionSource<int16_t>(const Instruction* inst,
                                              int index) {
   return inst->Source(index)->AsInt16(0);
 }
 template <>
-inline HalfFP GetInstructionSource<HalfFP>(const Instruction *inst, int index) {
+inline HalfFP GetInstructionSource<HalfFP>(const Instruction* inst, int index) {
   auto value = inst->Source(index)->AsUint16(0);
   return HalfFP{.value = value};
 }
 template <>
-inline uint32_t GetInstructionSource<uint32_t>(const Instruction *inst,
+inline uint32_t GetInstructionSource<uint32_t>(const Instruction* inst,
                                                int index) {
   return inst->Source(index)->AsUint32(0);
 }
 template <>
-inline int32_t GetInstructionSource<int32_t>(const Instruction *inst,
+inline int32_t GetInstructionSource<int32_t>(const Instruction* inst,
                                              int index) {
   return inst->Source(index)->AsInt32(0);
 }
 template <>
-inline float GetInstructionSource<float>(const Instruction *inst, int index) {
+inline float GetInstructionSource<float>(const Instruction* inst, int index) {
   auto value = inst->Source(index)->AsUint32(0);
-  return *reinterpret_cast<float *>(&value);
+  return *reinterpret_cast<float*>(&value);
 }
 template <>
-inline uint64_t GetInstructionSource<uint64_t>(const Instruction *inst,
+inline uint64_t GetInstructionSource<uint64_t>(const Instruction* inst,
                                                int index) {
   return inst->Source(index)->AsUint64(0);
 }
 template <>
-inline int64_t GetInstructionSource<int64_t>(const Instruction *inst,
+inline int64_t GetInstructionSource<int64_t>(const Instruction* inst,
                                              int index) {
   return inst->Source(index)->AsInt64(0);
 }
 template <>
-inline double GetInstructionSource<double>(const Instruction *inst, int index) {
+inline double GetInstructionSource<double>(const Instruction* inst, int index) {
   auto value = inst->Source(index)->AsUint64(0);
-  return *reinterpret_cast<double *>(&value);
+  return *reinterpret_cast<double*>(&value);
 }
 template <>
 inline absl::uint128 GetInstructionSource<absl::uint128>(
-    const Instruction *inst, int index) {
+    const Instruction* inst, int index) {
   return static_cast<absl::uint128>(inst->Source(index)->AsUint64(0));
 }
 template <>
-inline absl::int128 GetInstructionSource<absl::int128>(const Instruction *inst,
+inline absl::int128 GetInstructionSource<absl::int128>(const Instruction* inst,
                                                        int index) {
   return static_cast<absl::int128>(inst->Source(index)->AsInt64(0));
 }
@@ -316,66 +316,66 @@
 // The base case shouldn't be matched. No return statement is provided, so it
 // will generate a compile time error if no other case is matched.
 template <typename T>
-inline T GetInstructionSource(const Instruction *inst, int index,
+inline T GetInstructionSource(const Instruction* inst, int index,
                               int element) { /*empty */ }
 // The following provide specializations for each of the integral types of
 // operand values, both signed and unsigned.
 template <>
-inline bool GetInstructionSource<bool>(const Instruction *inst, int index,
+inline bool GetInstructionSource<bool>(const Instruction* inst, int index,
                                        int element) {
   return inst->Source(index)->AsBool(element);
 }
 template <>
-inline uint8_t GetInstructionSource<uint8_t>(const Instruction *inst, int index,
+inline uint8_t GetInstructionSource<uint8_t>(const Instruction* inst, int index,
                                              int element) {
   return inst->Source(index)->AsUint8(element);
 }
 template <>
-inline int8_t GetInstructionSource<int8_t>(const Instruction *inst, int index,
+inline int8_t GetInstructionSource<int8_t>(const Instruction* inst, int index,
                                            int element) {
   return inst->Source(index)->AsInt8(element);
 }
 template <>
-inline uint16_t GetInstructionSource<uint16_t>(const Instruction *inst,
+inline uint16_t GetInstructionSource<uint16_t>(const Instruction* inst,
                                                int index, int element) {
   return inst->Source(index)->AsUint16(element);
 }
 template <>
-inline int16_t GetInstructionSource<int16_t>(const Instruction *inst, int index,
+inline int16_t GetInstructionSource<int16_t>(const Instruction* inst, int index,
                                              int element) {
   return inst->Source(index)->AsInt16(element);
 }
 template <>
-inline uint32_t GetInstructionSource<uint32_t>(const Instruction *inst,
+inline uint32_t GetInstructionSource<uint32_t>(const Instruction* inst,
                                                int index, int element) {
   return inst->Source(index)->AsUint32(element);
 }
 template <>
-inline int32_t GetInstructionSource<int32_t>(const Instruction *inst, int index,
+inline int32_t GetInstructionSource<int32_t>(const Instruction* inst, int index,
                                              int element) {
   return inst->Source(index)->AsInt32(element);
 }
 template <>
-inline float GetInstructionSource<float>(const Instruction *inst, int index,
+inline float GetInstructionSource<float>(const Instruction* inst, int index,
                                          int element) {
   auto value = inst->Source(index)->AsUint32(element);
-  return *reinterpret_cast<float *>(&value);
+  return *reinterpret_cast<float*>(&value);
 }
 template <>
-inline uint64_t GetInstructionSource<uint64_t>(const Instruction *inst,
+inline uint64_t GetInstructionSource<uint64_t>(const Instruction* inst,
                                                int index, int element) {
   return inst->Source(index)->AsUint64(element);
 }
 template <>
-inline int64_t GetInstructionSource<int64_t>(const Instruction *inst, int index,
+inline int64_t GetInstructionSource<int64_t>(const Instruction* inst, int index,
                                              int element) {
   return inst->Source(index)->AsInt64(element);
 }
 template <>
-inline double GetInstructionSource<double>(const Instruction *inst, int index,
+inline double GetInstructionSource<double>(const Instruction* inst, int index,
                                            int element) {
   auto value = inst->Source(index)->AsUint64(element);
-  return *reinterpret_cast<double *>(&value);
+  return *reinterpret_cast<double*>(&value);
 }
 
 }  // namespace generic
diff --git a/mpact/sim/generic/instruction_helpers.h b/mpact/sim/generic/instruction_helpers.h
index b3d3b31..a86a46d 100644
--- a/mpact/sim/generic/instruction_helpers.h
+++ b/mpact/sim/generic/instruction_helpers.h
@@ -34,12 +34,12 @@
 // destination operand. This version supports different types for the result and
 // each of the two source operands.
 template <typename Result, typename Argument1, typename Argument2>
-inline void BinaryOp(const Instruction *instruction,
+inline void BinaryOp(const Instruction* instruction,
                      std::function<Result(Argument1, Argument2)> operation) {
   Argument1 lhs = generic::GetInstructionSource<Argument1>(instruction, 0);
   Argument2 rhs = generic::GetInstructionSource<Argument2>(instruction, 1);
   Result dest_value = operation(lhs, rhs);
-  auto *db = instruction->Destination(0)->AllocateDataBuffer();
+  auto* db = instruction->Destination(0)->AllocateDataBuffer();
   db->SetSubmit<Result>(0, dest_value);
 }
 
@@ -49,12 +49,12 @@
 // destination operand. This version supports different types for the result
 // and the operands, but the two source operands must have the same type.
 template <typename Result, typename Argument>
-inline void BinaryOp(const Instruction *instruction,
+inline void BinaryOp(const Instruction* instruction,
                      std::function<Result(Argument, Argument)> operation) {
   Argument lhs = generic::GetInstructionSource<Argument>(instruction, 0);
   Argument rhs = generic::GetInstructionSource<Argument>(instruction, 1);
   Result dest_value = operation(lhs, rhs);
-  auto *db = instruction->Destination(0)->AllocateDataBuffer();
+  auto* db = instruction->Destination(0)->AllocateDataBuffer();
   db->SetSubmit<Result>(0, dest_value);
 }
 
@@ -64,12 +64,12 @@
 // destination operand. This version requires both result and source operands
 // to have the same type.
 template <typename Result>
-inline void BinaryOp(const Instruction *instruction,
+inline void BinaryOp(const Instruction* instruction,
                      std::function<Result(Result, Result)> operation) {
   Result lhs = generic::GetInstructionSource<Result>(instruction, 0);
   Result rhs = generic::GetInstructionSource<Result>(instruction, 1);
   Result dest_value = operation(lhs, rhs);
-  auto *db = instruction->Destination(0)->AllocateDataBuffer();
+  auto* db = instruction->Destination(0)->AllocateDataBuffer();
   db->SetSubmit<Result>(0, dest_value);
 }
 
@@ -79,11 +79,11 @@
 // destination operand. This version supports the result and argument having
 // different types.
 template <typename Result, typename Argument>
-inline void UnaryOp(const Instruction *instruction,
+inline void UnaryOp(const Instruction* instruction,
                     std::function<Result(Argument)> operation) {
   Argument lhs = generic::GetInstructionSource<Argument>(instruction, 0);
   Result dest_value = operation(lhs);
-  auto *db = instruction->Destination(0)->AllocateDataBuffer();
+  auto* db = instruction->Destination(0)->AllocateDataBuffer();
   db->SetSubmit<Result>(0, dest_value);
 }
 
@@ -93,11 +93,11 @@
 // destination operand. This version requires that the result and argument have
 // the same type.
 template <typename Result>
-inline void UnaryOp(const Instruction *instruction,
+inline void UnaryOp(const Instruction* instruction,
                     std::function<Result(Result)> operation) {
   Result lhs = generic::GetInstructionSource<Result>(instruction, 0);
   Result dest_value = operation(lhs);
-  auto *db = instruction->Destination(0)->AllocateDataBuffer();
+  auto* db = instruction->Destination(0)->AllocateDataBuffer();
   db->SetSubmit<Result>(0, dest_value);
 }
 
@@ -107,10 +107,10 @@
 template <typename Result, typename Argument1, typename Argument2,
           typename Argument3>
 inline void TernaryVectorOp(
-    const Instruction *instruction,
+    const Instruction* instruction,
     std::function<Result(Argument1, Argument2, Argument3)> operation) {
-  auto *dst = instruction->Destination(0);
-  auto *db = dst->AllocateDataBuffer();
+  auto* dst = instruction->Destination(0);
+  auto* db = dst->AllocateDataBuffer();
   int size = dst->shape()[0];
   for (int i = 0; i < size; i++) {
     Argument1 x_val =
@@ -131,10 +131,10 @@
 // the arguments have to all have the same type.
 template <typename Result, typename Argument>
 inline void TernaryVectorOp(
-    const Instruction *instruction,
+    const Instruction* instruction,
     std::function<Result(Argument, Argument, Argument)> operation) {
-  auto *dst = instruction->Destination(0);
-  auto *db = dst->AllocateDataBuffer();
+  auto* dst = instruction->Destination(0);
+  auto* db = dst->AllocateDataBuffer();
   int size = dst->shape()[0];
   for (int i = 0; i < size; i++) {
     Argument x_val = generic::GetInstructionSource<Argument>(instruction, 0, i);
@@ -151,10 +151,10 @@
 // requires the result and arguments to have the same type.
 template <typename Result>
 inline void TernaryVectorOp(
-    const Instruction *instruction,
+    const Instruction* instruction,
     std::function<Result(Result, Result, Result)> operation) {
-  auto *dst = instruction->Destination(0);
-  auto *db = dst->AllocateDataBuffer();
+  auto* dst = instruction->Destination(0);
+  auto* db = dst->AllocateDataBuffer();
   int size = dst->shape()[0];
   for (int i = 0; i < size; i++) {
     Result x_val = generic::GetInstructionSource<Result>(instruction, 0, i);
@@ -171,10 +171,10 @@
 // allows for different types for the result and each argument.
 template <typename Result, typename Argument1, typename Argument2>
 inline void BinaryVectorOp(
-    const Instruction *instruction,
+    const Instruction* instruction,
     std::function<Result(Argument1, Argument2)> operation) {
-  auto *dst = instruction->Destination(0);
-  auto *db = dst->AllocateDataBuffer();
+  auto* dst = instruction->Destination(0);
+  auto* db = dst->AllocateDataBuffer();
   int size = dst->shape()[0];
   for (int i = 0; i < size; i++) {
     Argument1 lhs = generic::GetInstructionSource<Argument1>(instruction, 0, i);
@@ -191,10 +191,10 @@
 // the arguments have to have the same type.
 template <typename Result, typename Argument>
 inline void BinaryVectorOp(
-    const Instruction *instruction,
+    const Instruction* instruction,
     std::function<Result(Argument, Argument)> operation) {
-  auto *dst = instruction->Destination(0);
-  auto *db = dst->AllocateDataBuffer();
+  auto* dst = instruction->Destination(0);
+  auto* db = dst->AllocateDataBuffer();
   int size = dst->shape()[0];
   for (int i = 0; i < size; i++) {
     Argument lhs = generic::GetInstructionSource<Argument>(instruction, 0, i);
@@ -209,10 +209,10 @@
 // two operand vector instruction semantic functions. This version
 // requires the result and arguments to have the same type.
 template <typename Result>
-inline void BinaryVectorOp(const Instruction *instruction,
+inline void BinaryVectorOp(const Instruction* instruction,
                            std::function<Result(Result, Result)> operation) {
-  auto *dst = instruction->Destination(0);
-  auto *db = dst->AllocateDataBuffer();
+  auto* dst = instruction->Destination(0);
+  auto* db = dst->AllocateDataBuffer();
   int size = dst->shape()[0];
   for (int i = 0; i < size; i++) {
     Result lhs = generic::GetInstructionSource<Result>(instruction, 0, i);
@@ -227,10 +227,10 @@
 // single operand vector instruction semantic functions. This version
 // allows the result and argument to have different types.
 template <typename Result, typename Argument>
-inline void UnaryVectorOp(const Instruction *instruction,
+inline void UnaryVectorOp(const Instruction* instruction,
                           std::function<Result(Argument)> operation) {
-  auto *dst = instruction->Destination(0);
-  auto *db = dst->AllocateDataBuffer();
+  auto* dst = instruction->Destination(0);
+  auto* db = dst->AllocateDataBuffer();
   int size = dst->shape()[0];
   for (int i = 0; i < size; i++) {
     Argument lhs = generic::GetInstructionSource<Argument>(instruction, 0, i);
@@ -244,10 +244,10 @@
 // single operand vector instruction semantic functions. This version
 // requires the result and argument to have the same type.
 template <typename Result>
-inline void UnaryVectorOp(const Instruction *instruction,
+inline void UnaryVectorOp(const Instruction* instruction,
                           std::function<Result(Result)> operation) {
-  auto *dst = instruction->Destination(0);
-  auto *db = dst->AllocateDataBuffer();
+  auto* dst = instruction->Destination(0);
+  auto* db = dst->AllocateDataBuffer();
   int size = dst->shape()[0];
   for (int i = 0; i < size; i++) {
     Result lhs = generic::GetInstructionSource<Result>(instruction, 0, i);
diff --git a/mpact/sim/generic/literal_operand.h b/mpact/sim/generic/literal_operand.h
index c74cba2..1f47377 100644
--- a/mpact/sim/generic/literal_operand.h
+++ b/mpact/sim/generic/literal_operand.h
@@ -56,9 +56,9 @@
  public:
   BoolLiteralOperand() : as_string_(absl::StrCat(literal)) {}
   BoolLiteralOperand(absl::string_view as_string) : as_string_(as_string) {}
-  BoolLiteralOperand(const std::vector<int> &shape, absl::string_view as_string)
+  BoolLiteralOperand(const std::vector<int>& shape, absl::string_view as_string)
       : shape_(shape), as_string_(as_string) {}
-  explicit BoolLiteralOperand(const std::vector<int> &shape)
+  explicit BoolLiteralOperand(const std::vector<int>& shape)
       : BoolLiteralOperand(shape, absl::StrCat(literal)) {}
 
   // Methods for accessing the literal value. Always returns the same
@@ -95,9 +95,9 @@
  public:
   IntLiteralOperand() : as_string_(absl::StrCat(literal)) {};
   IntLiteralOperand(absl::string_view as_string) : as_string_(as_string) {}
-  IntLiteralOperand(const std::vector<int> &shape, absl::string_view as_string)
+  IntLiteralOperand(const std::vector<int>& shape, absl::string_view as_string)
       : shape_(shape), as_string_(as_string) {}
-  explicit IntLiteralOperand(const std::vector<int> &shape)
+  explicit IntLiteralOperand(const std::vector<int>& shape)
       : IntLiteralOperand(shape, absl::StrCat(literal)) {}
 
   // Methods for accessing the immediate value. Always returns the same
diff --git a/mpact/sim/generic/operand_interface.h b/mpact/sim/generic/operand_interface.h
index e39adc5..21ee4b2 100644
--- a/mpact/sim/generic/operand_interface.h
+++ b/mpact/sim/generic/operand_interface.h
@@ -88,14 +88,14 @@
  public:
   virtual ~DestinationOperandInterface() = default;
   // Allocates a data buffer with ownership, latency and delay line set up.
-  virtual DataBuffer *AllocateDataBuffer() = 0;
+  virtual DataBuffer* AllocateDataBuffer() = 0;
   // Takes an existing data buffer, and initializes it for the destination
   // as if AllocateDataBuffer had been called.
-  virtual void InitializeDataBuffer(DataBuffer *db) = 0;
+  virtual void InitializeDataBuffer(DataBuffer* db) = 0;
   // Allocates and initializes data buffer as if AllocateDataBuffer had been
   // called, but also copies in the value from the current value of the
   // destination.
-  virtual DataBuffer *CopyDataBuffer() = 0;
+  virtual DataBuffer* CopyDataBuffer() = 0;
   // Returns the latency associated with the destination operand.
   virtual int latency() const = 0;
   // Return a pointer to the object instance that implements the state in
diff --git a/mpact/sim/generic/program_error.cc b/mpact/sim/generic/program_error.cc
index daf4589..a566108 100644
--- a/mpact/sim/generic/program_error.cc
+++ b/mpact/sim/generic/program_error.cc
@@ -83,7 +83,7 @@
 }
 
 void ProgramErrorController::ClearAll() {
-  for (auto &entry : program_error_info_) {
+  for (auto& entry : program_error_info_) {
     entry.error_messages.clear();
   }
   unmasked_program_errors_.clear();
@@ -167,7 +167,7 @@
   return names;
 }
 
-const std::vector<std::string> &ProgramErrorController::GetErrorMessages(
+const std::vector<std::string>& ProgramErrorController::GetErrorMessages(
     absl::string_view program_error_name) {
   auto entry = program_error_map_.find(program_error_name);
   if (program_error_map_.end() != entry) {
@@ -202,7 +202,7 @@
 
 // Constructor and method for class ProgramError.
 ProgramError::ProgramError(absl::string_view name,
-                           ProgramErrorController *controller)
+                           ProgramErrorController* controller)
     : name_(name), controller_(controller) {}
 
 void ProgramError::Raise(absl::string_view error_message) {
diff --git a/mpact/sim/generic/program_error.h b/mpact/sim/generic/program_error.h
index 0e80581..d9a2635 100644
--- a/mpact/sim/generic/program_error.h
+++ b/mpact/sim/generic/program_error.h
@@ -92,7 +92,7 @@
   // named program error. If there is no such program_error_name the internal
   // error is raised (see kInternalErrorName), and the error messages for that
   // are returned.
-  const std::vector<std::string> &GetErrorMessages(
+  const std::vector<std::string>& GetErrorMessages(
       absl::string_view program_error_name);
 
   // Raises the named program error and adds the error message to its message
@@ -142,7 +142,7 @@
  private:
   // The constructor is private, as the handle is obtained from a
   // ProgramErrorController instance.
-  ProgramError(absl::string_view name, ProgramErrorController *controller);
+  ProgramError(absl::string_view name, ProgramErrorController* controller);
 
  public:
   // Raise the error to the ProgramErrorController with the given additional
@@ -153,7 +153,7 @@
 
  private:
   std::string name_;
-  ProgramErrorController *controller_;
+  ProgramErrorController* controller_;
 };
 
 }  // namespace generic
diff --git a/mpact/sim/generic/register.cc b/mpact/sim/generic/register.cc
index 99c976e..bf7c79a 100644
--- a/mpact/sim/generic/register.cc
+++ b/mpact/sim/generic/register.cc
@@ -27,12 +27,12 @@
 namespace sim {
 namespace generic {
 
-RegisterBase::RegisterBase(ArchState *state, absl::string_view name,
-                           const std::vector<int> &shape, int unit_size)
+RegisterBase::RegisterBase(ArchState* state, absl::string_view name,
+                           const std::vector<int>& shape, int unit_size)
     : StateItemBase(state, name, shape, unit_size), data_buffer_(nullptr) {
   // Initialize register with a data buffer set to 0.
   if (state != nullptr) {
-    auto *db = state->db_factory()->Allocate<uint8_t>(size());
+    auto* db = state->db_factory()->Allocate<uint8_t>(size());
     std::memset(db->raw_ptr(), 0, size());
     SetDataBuffer(db);
     db->DecRef();
@@ -46,7 +46,7 @@
   }
 }
 
-void RegisterBase::SetDataBuffer(DataBuffer *db) {
+void RegisterBase::SetDataBuffer(DataBuffer* db) {
   // For now, ignore if the sizes don't match.
   // ABSL_HARDENING_ASSERT(db->size<uint8_t>() == size());
   if (nullptr != data_buffer_) {
@@ -56,14 +56,14 @@
   data_buffer_ = db;
 }
 
-ReservedRegisterBase::ReservedRegisterBase(ArchState *state,
+ReservedRegisterBase::ReservedRegisterBase(ArchState* state,
                                            absl::string_view name,
-                                           const std::vector<int> &shape,
+                                           const std::vector<int>& shape,
                                            int unit_size,
-                                           SimpleResource *resource)
+                                           SimpleResource* resource)
     : RegisterBase(state, name, shape, unit_size), resource_(resource) {}
 
-void ReservedRegisterBase::SetDataBuffer(DataBuffer *db) {
+void ReservedRegisterBase::SetDataBuffer(DataBuffer* db) {
   // Use the base class to update the data buffer.
   RegisterBase::SetDataBuffer(db);
   // Release the resource if set.
diff --git a/mpact/sim/generic/register.h b/mpact/sim/generic/register.h
index b25861b..36c042b 100644
--- a/mpact/sim/generic/register.h
+++ b/mpact/sim/generic/register.h
@@ -48,8 +48,8 @@
 class RegisterSourceOperand : public SourceOperandInterface {
  public:
   // Constructor. Note, default constructor deleted.
-  RegisterSourceOperand(RegisterBase *reg, std::string op_name);
-  explicit RegisterSourceOperand(RegisterBase *reg);
+  RegisterSourceOperand(RegisterBase* reg, std::string op_name);
+  explicit RegisterSourceOperand(RegisterBase* reg);
 
   RegisterSourceOperand() = delete;
 
@@ -72,14 +72,14 @@
   // Returns the RegisterBase object wrapped in absl::any.
   std::any GetObject() const override { return std::any(register_); }
   // Non-inherited method to get the register object.
-  RegisterBase *GetRegister() const { return register_; }
+  RegisterBase* GetRegister() const { return register_; }
   // Returns the shape of the register.
   std::vector<int> shape() const override;
 
   std::string AsString() const override { return op_name_; }
 
  private:
-  RegisterBase *register_;
+  RegisterBase* register_;
   std::string op_name_;
 };
 
@@ -89,23 +89,23 @@
 class RegisterDestinationOperand : public DestinationOperandInterface {
  public:
   // Constructor and Destructor
-  RegisterDestinationOperand(RegisterBase *reg, int latency);
-  RegisterDestinationOperand(RegisterBase *reg, int latency,
+  RegisterDestinationOperand(RegisterBase* reg, int latency);
+  RegisterDestinationOperand(RegisterBase* reg, int latency,
                              std::string op_name);
   RegisterDestinationOperand() = delete;
 
   // Initializes the DataBuffer instance so that when Submit is called, it can
   // be entered into the correct delay line, with the correct latency, targeting
   // the correct register.
-  void InitializeDataBuffer(DataBuffer *db) override;
+  void InitializeDataBuffer(DataBuffer* db) override;
 
   // Allocates and returns an initialized DataBuffer instance that contains a
   // copy of the current value of the register. This is useful when only part
   // of the destination register will be modified.
-  DataBuffer *CopyDataBuffer() override;
+  DataBuffer* CopyDataBuffer() override;
 
   // Allocates and returns an initialized DataBuffer instance.
-  DataBuffer *AllocateDataBuffer() final;
+  DataBuffer* AllocateDataBuffer() final;
 
   // Returns the latency associated with writes to this register operand.
   int latency() const override { return latency_; }
@@ -113,7 +113,7 @@
   // Returns the RegisterBase object wrapped in absl::any.
   std::any GetObject() const override { return std::any(register_); }
   // Non-inherited method to get the register object.
-  RegisterBase *GetRegister() const { return register_; }
+  RegisterBase* GetRegister() const { return register_; }
 
   // Returns the shape of the underlying register (the number of elements in
   // each dimension). For instance {0} indicates a scalar quantity, whereas
@@ -123,10 +123,10 @@
   std::string AsString() const override { return op_name_; }
 
  private:
-  RegisterBase *register_;
-  DataBufferFactory *db_factory_;
+  RegisterBase* register_;
+  DataBufferFactory* db_factory_;
   int latency_;
-  DataBufferDelayLine *delay_line_;
+  DataBufferDelayLine* delay_line_;
   std::string op_name_;
 };
 
@@ -141,21 +141,21 @@
   // protected section below.
   ~RegisterBase() override;
   RegisterBase() = delete;
-  RegisterBase(const RegisterBase &) = delete;
-  RegisterBase &operator=(const RegisterBase &) = delete;
+  RegisterBase(const RegisterBase&) = delete;
+  RegisterBase& operator=(const RegisterBase&) = delete;
 
   // DecRef's the current data buffer and replaces it with a new one.
-  void SetDataBuffer(DataBuffer *db) override;
+  void SetDataBuffer(DataBuffer* db) override;
   // Returns a pointer to the DataBuffer that contains the current value of
   // the register.
-  DataBuffer *data_buffer() const { return data_buffer_; }
+  DataBuffer* data_buffer() const { return data_buffer_; }
 
  protected:
-  RegisterBase(ArchState *state, absl::string_view name,
-               const std::vector<int> &shape, int unit_size);
+  RegisterBase(ArchState* state, absl::string_view name,
+               const std::vector<int>& shape, int unit_size);
 
  private:
-  DataBuffer *data_buffer_;
+  DataBuffer* data_buffer_;
   std::vector<UpdateCallbackFunction> next_update_callbacks_;
 };
 
@@ -165,24 +165,24 @@
 class ReservedRegisterBase : public RegisterBase {
  public:
   ReservedRegisterBase() = delete;
-  ReservedRegisterBase(const ReservedRegisterBase &) = delete;
-  ReservedRegisterBase &operator=(const ReservedRegisterBase &) = delete;
+  ReservedRegisterBase(const ReservedRegisterBase&) = delete;
+  ReservedRegisterBase& operator=(const ReservedRegisterBase&) = delete;
 
   // Override the SetDataBuffer to release the SimpleResource instance when
   // called.
-  void SetDataBuffer(DataBuffer *db) override;
+  void SetDataBuffer(DataBuffer* db) override;
 
   // Accessor.
-  SimpleResource *resource() const { return resource_; }
+  SimpleResource* resource() const { return resource_; }
 
  protected:
-  ReservedRegisterBase(ArchState *state, absl::string_view name,
-                       const std::vector<int> &shape, int unit_size,
-                       SimpleResource *resource);
+  ReservedRegisterBase(ArchState* state, absl::string_view name,
+                       const std::vector<int>& shape, int unit_size,
+                       SimpleResource* resource);
 
  private:
   // SimpleResource instance associated with the register.
-  SimpleResource *resource_;
+  SimpleResource* resource_;
 };
 
 // Scalar register type with value type ElementType.
@@ -224,12 +224,12 @@
               RegisterDestinationOperand<ElementType>, M, N>;
 
 template <typename T>
-RegisterSourceOperand<T>::RegisterSourceOperand(RegisterBase *reg,
+RegisterSourceOperand<T>::RegisterSourceOperand(RegisterBase* reg,
                                                 const std::string op_name)
     : register_(reg), op_name_(op_name) {}
 
 template <typename T>
-RegisterSourceOperand<T>::RegisterSourceOperand(RegisterBase *reg)
+RegisterSourceOperand<T>::RegisterSourceOperand(RegisterBase* reg)
     : RegisterSourceOperand(reg, reg->name()) {}
 
 template <typename T>
@@ -279,7 +279,7 @@
 }
 
 template <typename T>
-RegisterDestinationOperand<T>::RegisterDestinationOperand(RegisterBase *reg,
+RegisterDestinationOperand<T>::RegisterDestinationOperand(RegisterBase* reg,
                                                           int latency,
                                                           std::string op_name)
     : register_(reg),
@@ -289,27 +289,27 @@
       op_name_(op_name) {}
 
 template <typename T>
-RegisterDestinationOperand<T>::RegisterDestinationOperand(RegisterBase *reg,
+RegisterDestinationOperand<T>::RegisterDestinationOperand(RegisterBase* reg,
                                                           int latency)
     : RegisterDestinationOperand(reg, latency, reg->name()) {}
 
 template <typename T>
-void RegisterDestinationOperand<T>::InitializeDataBuffer(DataBuffer *db) {
+void RegisterDestinationOperand<T>::InitializeDataBuffer(DataBuffer* db) {
   db->set_destination(register_);
   db->set_latency(latency_);
   db->set_delay_line(delay_line_);
 }
 
 template <typename T>
-DataBuffer *RegisterDestinationOperand<T>::CopyDataBuffer() {
-  DataBuffer *db = db_factory_->MakeCopyOf(register_->data_buffer());
+DataBuffer* RegisterDestinationOperand<T>::CopyDataBuffer() {
+  DataBuffer* db = db_factory_->MakeCopyOf(register_->data_buffer());
   InitializeDataBuffer(db);
   return db;
 }
 
 template <typename T>
-DataBuffer *RegisterDestinationOperand<T>::AllocateDataBuffer() {
-  DataBuffer *db = db_factory_->Allocate(register_->size());
+DataBuffer* RegisterDestinationOperand<T>::AllocateDataBuffer() {
+  DataBuffer* db = db_factory_->Allocate(register_->size());
   InitializeDataBuffer(db);
   return db;
 }
diff --git a/mpact/sim/generic/resource_bitset.h b/mpact/sim/generic/resource_bitset.h
index c9773ac..5d0f848 100644
--- a/mpact/sim/generic/resource_bitset.h
+++ b/mpact/sim/generic/resource_bitset.h
@@ -28,9 +28,9 @@
 class ResourceBitSet {
  public:
   ResourceBitSet() = default;
-  ResourceBitSet(const ResourceBitSet &rhs);
-  ResourceBitSet(ResourceBitSet &&rhs);
-  ResourceBitSet &operator=(const ResourceBitSet &rhs);
+  ResourceBitSet(const ResourceBitSet& rhs);
+  ResourceBitSet(ResourceBitSet&& rhs);
+  ResourceBitSet& operator=(const ResourceBitSet& rhs);
   explicit ResourceBitSet(int bit_size);
   ~ResourceBitSet();
 
@@ -39,22 +39,22 @@
   // Add rhs bitset content to this. If the size of rhs is greater than this,
   // resize this to match. If the size of this is larger than rhs, the bits not
   // in rhs are assumed to be zero.
-  void Or(const ResourceBitSet &rhs);
+  void Or(const ResourceBitSet& rhs);
   // Remove rhs bitset content from this. If the size of rhs is greater than
   // this, the additional bits are ignored. If this is larger than rhs, the
   // missing rhs bits are assumed to be zero.
-  void AndNot(const ResourceBitSet &rhs);
+  void AndNot(const ResourceBitSet& rhs);
   // Return true if the bitsets have a non-empty intersection. If either is
   // larger than the other, the "missing" bits are assumed to be zero.
-  bool IsIntersectionNonEmpty(const ResourceBitSet &rhs) const;
+  bool IsIntersectionNonEmpty(const ResourceBitSet& rhs) const;
   // Locate the first bit set.  If there is no such bit
   // return false, otherwise, return true and set *position to the position of
   // that bit.
-  bool FindFirstSetBit(int *position) const;
+  bool FindFirstSetBit(int* position) const;
   // Locate the first bit set at or after *position. If there is no such bit
   // return false, otherwise, return true and set *position to the position of
   // that bit.
-  bool FindNextSetBit(int *position) const;
+  bool FindNextSetBit(int* position) const;
   // Return the number of set bits.
   int GetOnesCount() const;
   // Make the bitsize at least size bits long.
@@ -63,7 +63,7 @@
  private:
   using UInt = uint64_t;
   static constexpr int kBitsInUint = sizeof(UInt) * 8;
-  UInt *bits_ = nullptr;
+  UInt* bits_ = nullptr;
   int size_ = 0;
 };
 
diff --git a/mpact/sim/generic/simple_resource.cc b/mpact/sim/generic/simple_resource.cc
index 3b9a9d7..5602305 100644
--- a/mpact/sim/generic/simple_resource.cc
+++ b/mpact/sim/generic/simple_resource.cc
@@ -18,7 +18,9 @@
 
 #include "absl/log/log.h"
 #include "absl/status/status.h"
+#include "absl/status/statusor.h"
 #include "absl/strings/str_cat.h"
+#include "absl/strings/string_view.h"
 
 namespace mpact {
 namespace sim {
@@ -26,7 +28,7 @@
 
 // Initialize the bitmap and set the bit specified by index.
 SimpleResource::SimpleResource(absl::string_view name, int index,
-                               SimpleResourcePool *pool)
+                               SimpleResourcePool* pool)
     : name_(name), index_(index), pool_(pool) {
   resource_bit_.Resize(pool_->width());
   resource_bit_.Set(index);
@@ -39,13 +41,13 @@
 
 bool SimpleResource::IsFree() const { return pool_->IsFree(this); }
 
-SimpleResourceSet::SimpleResourceSet(SimpleResourcePool *pool) : pool_(pool) {
+SimpleResourceSet::SimpleResourceSet(SimpleResourcePool* pool) : pool_(pool) {
   resource_vector_.Resize(pool_->width());
 }
 
 // Verify that the resource comes from the same pool. If so, add it (union with)
 // the bitmap. Return appropriate status.
-absl::Status SimpleResourceSet::AddResource(SimpleResource *resource) {
+absl::Status SimpleResourceSet::AddResource(SimpleResource* resource) {
   // If the resource is nullptr, just return ok status.
   if (resource == nullptr) return absl::OkStatus();
   // Make sure it belongs to the same pool as the resource set.
@@ -61,7 +63,7 @@
 // If the resource doesn't exist, add it to the resource pool, before adding it
 // to the resource set.
 absl::Status SimpleResourceSet::AddResource(absl::string_view name) {
-  SimpleResource *resource = pool_->GetResource(name);
+  SimpleResource* resource = pool_->GetResource(name);
   if (nullptr == resource) {
     auto status = pool_->AddResource(name);
     if (!status.ok()) return status;
@@ -83,7 +85,7 @@
   std::string out = "[";
   std::string sep;
   for (int index = 0; resource_vector_.FindNextSetBit(&index); ++index) {
-    auto *resource = pool_->GetResource(index);
+    auto* resource = pool_->GetResource(index);
     if (resource == nullptr) {
       LOG(ERROR) << absl::StrCat("Cannot find resource (", index, ") in pool '",
                                  pool_->name(), "'");
@@ -102,7 +104,7 @@
 }
 
 SimpleResourcePool::~SimpleResourcePool() {
-  for (const auto &entry : resource_name_map_) {
+  for (const auto& entry : resource_name_map_) {
     delete entry.second;
   }
   resource_name_map_.clear();
@@ -114,7 +116,7 @@
 
 // Add named resource to the pool. If the pool has reached maximum size, return
 // an error.
-absl::StatusOr<SimpleResource *> SimpleResourcePool::AddResourceInternal(
+absl::StatusOr<SimpleResource*> SimpleResourcePool::AddResourceInternal(
     absl::string_view name) {
   if (resource_name_map_.size() == width_) {
     return absl::InternalError(absl::StrCat(
@@ -127,7 +129,7 @@
                      "' already exists in pool '", name_, "'"));
   }
   int index = resource_name_map_.size();
-  SimpleResource *resource = new SimpleResource(name, index, this);
+  SimpleResource* resource = new SimpleResource(name, index, this);
   resource_name_map_.emplace(name, resource);
   resources_.push_back(resource);
   return resource;
@@ -140,19 +142,19 @@
   return result.status();
 }
 
-SimpleResource *SimpleResourcePool::GetResource(unsigned index) const {
+SimpleResource* SimpleResourcePool::GetResource(unsigned index) const {
   if ((index < 0) || (index >= resources_.size())) return nullptr;
   return resources_[index];
 }
 
-SimpleResource *SimpleResourcePool::GetResource(absl::string_view name) const {
+SimpleResource* SimpleResourcePool::GetResource(absl::string_view name) const {
   auto ptr = resource_name_map_.find(name);
   if (ptr == resource_name_map_.end()) return nullptr;
   return ptr->second;
 }
 
-SimpleResource *SimpleResourcePool::GetOrAddResource(absl::string_view name) {
-  auto *resource = GetResource(name);
+SimpleResource* SimpleResourcePool::GetOrAddResource(absl::string_view name) {
+  auto* resource = GetResource(name);
   if (resource != nullptr) return resource;
 
   auto result = AddResourceInternal(name);
@@ -165,7 +167,7 @@
   return result.value();
 }
 
-SimpleResourceSet *SimpleResourcePool::CreateResourceSet() {
+SimpleResourceSet* SimpleResourcePool::CreateResourceSet() {
   resource_sets_.push_front(new SimpleResourceSet(this));
   return resource_sets_.front();
 }
@@ -173,28 +175,28 @@
 // Bitmap operations to reserve, free and check resources. Union with a bitmap
 // from a resource or resource set to reserve (set), difference to free (clear),
 // and non-empty intersection (non-zero and) to check.
-bool SimpleResourcePool::IsFree(const SimpleResourceSet *resource_set) const {
+bool SimpleResourcePool::IsFree(const SimpleResourceSet* resource_set) const {
   return !resource_vector_.IsIntersectionNonEmpty(
       resource_set->resource_vector());
 }
 
-bool SimpleResourcePool::IsFree(const SimpleResource *resource) const {
+bool SimpleResourcePool::IsFree(const SimpleResource* resource) const {
   return !resource_vector_.IsIntersectionNonEmpty(resource->resource_bit());
 }
 
-void SimpleResourcePool::Acquire(const SimpleResourceSet *resource_set) {
+void SimpleResourcePool::Acquire(const SimpleResourceSet* resource_set) {
   resource_vector_.Or(resource_set->resource_vector());
 }
 
-void SimpleResourcePool::Acquire(const SimpleResource *resource) {
+void SimpleResourcePool::Acquire(const SimpleResource* resource) {
   resource_vector_.Or(resource->resource_bit());
 }
 
-void SimpleResourcePool::Release(const SimpleResourceSet *resource_set) {
+void SimpleResourcePool::Release(const SimpleResourceSet* resource_set) {
   resource_vector_.AndNot(resource_set->resource_vector());
 }
 
-void SimpleResourcePool::Release(const SimpleResource *resource) {
+void SimpleResourcePool::Release(const SimpleResource* resource) {
   resource_vector_.AndNot(resource->resource_bit());
 }
 
@@ -202,7 +204,7 @@
   std::string out = "[";
   std::string sep;
   for (int index = 0; resource_vector_.FindNextSetBit(&index); ++index) {
-    auto *resource = resources_[index];
+    auto* resource = resources_[index];
     if (resource == nullptr) {
       LOG(ERROR) << absl::StrCat("Cannot find resource (", index, ") in pool '",
                                  name(), "'");
diff --git a/mpact/sim/generic/simple_resource.h b/mpact/sim/generic/simple_resource.h
index cba7234..1883f07 100644
--- a/mpact/sim/generic/simple_resource.h
+++ b/mpact/sim/generic/simple_resource.h
@@ -22,6 +22,7 @@
 #include "absl/container/flat_hash_map.h"
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
+#include "absl/strings/string_view.h"
 #include "mpact/sim/generic/resource_bitset.h"
 
 namespace mpact {
@@ -59,7 +60,7 @@
  private:
   // The constructor is private. It is called from a SimpleResourcePool
   // instance in which the resource belongs.
-  SimpleResource(absl::string_view name, int index, SimpleResourcePool *pool);
+  SimpleResource(absl::string_view name, int index, SimpleResourcePool* pool);
   SimpleResource() = delete;
   virtual ~SimpleResource() = default;
 
@@ -73,20 +74,20 @@
   bool IsFree() const;
 
   // Returns the "one hot" bitvector for the resource.
-  const ResourceBitSet &resource_bit() const { return resource_bit_; }
+  const ResourceBitSet& resource_bit() const { return resource_bit_; }
 
   // The bit index of the resource in the bitvector.
   int index() const { return index_; }
 
   // Other accessors.
-  const std::string &name() const { return name_; }
-  const SimpleResourcePool *pool() const { return pool_; }
+  const std::string& name() const { return name_; }
+  const SimpleResourcePool* pool() const { return pool_; }
 
  private:
   ResourceBitSet resource_bit_;
   std::string name_;
   int index_;
-  SimpleResourcePool *pool_;
+  SimpleResourcePool* pool_;
 };
 
 // The SimpleResourceSet models a set of individual SimpleResources that are
@@ -95,14 +96,14 @@
   friend class SimpleResourcePool;
 
  private:
-  explicit SimpleResourceSet(SimpleResourcePool *);
+  explicit SimpleResourceSet(SimpleResourcePool*);
   SimpleResourceSet() = delete;
   virtual ~SimpleResourceSet() = default;
 
  public:
   // Adds the resource to the resource set. Return error if the resource
   // belongs to a different pool.
-  absl::Status AddResource(SimpleResource *resource);
+  absl::Status AddResource(SimpleResource* resource);
   absl::Status AddResource(absl::string_view name);
 
   // Mark the resources in the set reserved in the associated resource pool.
@@ -118,11 +119,11 @@
   std::string AsString() const;
 
   // Return the bit vector for the resources in this set.
-  const ResourceBitSet &resource_vector() const { return resource_vector_; }
+  const ResourceBitSet& resource_vector() const { return resource_vector_; }
 
  private:
   ResourceBitSet resource_vector_;
-  SimpleResourcePool *pool_;
+  SimpleResourcePool* pool_;
 };
 
 // The SimpleResourcePool is a class for managing a group of SimpleResource
@@ -141,45 +142,45 @@
 
   // Return the SimpleResource pointer of the named resource, or nullptr if it
   // hasn't been added.
-  SimpleResource *GetResource(absl::string_view name) const;
+  SimpleResource* GetResource(absl::string_view name) const;
   // Return the SimpleResource pointer of resource with bit index 'index', or
   // nullptr if it hasn't been added.
-  SimpleResource *GetResource(unsigned index) const;
+  SimpleResource* GetResource(unsigned index) const;
   // If the resource does not exisit, add it. Return a pointer to the named
   // resource.
-  SimpleResource *GetOrAddResource(absl::string_view name);
+  SimpleResource* GetOrAddResource(absl::string_view name);
   // Create an resource set for the current resource pool.
-  SimpleResourceSet *CreateResourceSet();
+  SimpleResourceSet* CreateResourceSet();
 
   // Return true if the resources in the resource/resource set are not reserved
   // in the resource pool.
-  bool IsFree(const SimpleResourceSet *resource_set) const;
-  bool IsFree(const SimpleResource *resource) const;
+  bool IsFree(const SimpleResourceSet* resource_set) const;
+  bool IsFree(const SimpleResource* resource) const;
 
   // Mark the resource/resource set reserved in the resource pool.
-  void Acquire(const SimpleResourceSet *resource_set);
-  void Acquire(const SimpleResource *resource);
+  void Acquire(const SimpleResourceSet* resource_set);
+  void Acquire(const SimpleResource* resource);
 
   // Mark the resource/resource set unreserved in the resource pool.
-  void Release(const SimpleResourceSet *resource_set);
-  void Release(const SimpleResource *resource);
+  void Release(const SimpleResourceSet* resource_set);
+  void Release(const SimpleResource* resource);
 
   // List reserved resources as string.
   std::string ReservedAsString() const;
 
   // Accessors.
-  const std::string &name() const { return name_; }
-  const ResourceBitSet &resource_vector() const { return resource_vector_; }
+  const std::string& name() const { return name_; }
+  const ResourceBitSet& resource_vector() const { return resource_vector_; }
 
   // The width is the max number of resources (i.e., bitwidth of the resource
   // vector).
   unsigned width() const { return width_; }
 
  private:
-  absl::StatusOr<SimpleResource *> AddResourceInternal(absl::string_view name);
-  absl::flat_hash_map<std::string, SimpleResource *> resource_name_map_;
-  std::vector<SimpleResource *> resources_;
-  std::list<SimpleResourceSet *> resource_sets_;
+  absl::StatusOr<SimpleResource*> AddResourceInternal(absl::string_view name);
+  absl::flat_hash_map<std::string, SimpleResource*> resource_name_map_;
+  std::vector<SimpleResource*> resources_;
+  std::list<SimpleResourceSet*> resource_sets_;
   ResourceBitSet resource_vector_;
   std::string name_;
   unsigned width_;
diff --git a/mpact/sim/generic/simple_resource_operand.h b/mpact/sim/generic/simple_resource_operand.h
index 32a3547..9b6f9b9 100644
--- a/mpact/sim/generic/simple_resource_operand.h
+++ b/mpact/sim/generic/simple_resource_operand.h
@@ -30,7 +30,7 @@
 class SimpleResourceDelayRecord {
  public:
   SimpleResourceDelayRecord() = delete;
-  explicit SimpleResourceDelayRecord(SimpleResourceSet *resource_set)
+  explicit SimpleResourceDelayRecord(SimpleResourceSet* resource_set)
       : resource_set_(resource_set) {}
 
   ~SimpleResourceDelayRecord() = default;
@@ -38,7 +38,7 @@
   void Apply() { resource_set_->Release(); }
 
  private:
-  SimpleResourceSet *resource_set_;
+  SimpleResourceSet* resource_set_;
 };
 
 // Type def for the SimpleResourceDelayLine.
@@ -53,12 +53,12 @@
 class SimpleResourceOperand : public ResourceOperandInterface {
  public:
   // Constructors and Destructors. Default constructor deleted.
-  SimpleResourceOperand(SimpleResourceSet *resource_set, int latency,
-                        SimpleResourceDelayLine *delay_line)
+  SimpleResourceOperand(SimpleResourceSet* resource_set, int latency,
+                        SimpleResourceDelayLine* delay_line)
       : resource_set_(resource_set),
         latency_(latency),
         delay_line_(delay_line) {}
-  SimpleResourceOperand(SimpleResourceSet *resource_set, int latency)
+  SimpleResourceOperand(SimpleResourceSet* resource_set, int latency)
       : SimpleResourceOperand(resource_set, latency, nullptr) {}
   SimpleResourceOperand() = delete;
   ~SimpleResourceOperand() override = default;
@@ -87,20 +87,20 @@
   std::string AsString() const override { return resource_set_->AsString(); }
 
   // Accessor.
-  void set_delay_line(SimpleResourceDelayLine *delay_line) {
+  void set_delay_line(SimpleResourceDelayLine* delay_line) {
     delay_line_ = delay_line;
   }
 
-  SimpleResourceSet *resource_set() const { return resource_set_; }
+  SimpleResourceSet* resource_set() const { return resource_set_; }
   int latency() const { return latency_; }
 
  private:
   // Pointer to the resource set that will be released.
-  SimpleResourceSet *resource_set_ = nullptr;
+  SimpleResourceSet* resource_set_ = nullptr;
   // Latency of the release. 0 = immediate, 1 = before next cycle, etc.
   int latency_;
   // Pointer to the delay line to be used.
-  SimpleResourceDelayLine *delay_line_;
+  SimpleResourceDelayLine* delay_line_;
 };
 
 }  // namespace generic
diff --git a/mpact/sim/generic/state_item.h b/mpact/sim/generic/state_item.h
index 1df112c..6abe682 100644
--- a/mpact/sim/generic/state_item.h
+++ b/mpact/sim/generic/state_item.h
@@ -67,18 +67,18 @@
  public:
   using ValueType = ElementType;
   template <typename... Ps>
-  explicit StateItem(ArchState *arch_state, absl::string_view name, Ps... pargs)
+  explicit StateItem(ArchState* arch_state, absl::string_view name, Ps... pargs)
       : BaseType(arch_state, name, {1}, sizeof(ElementType), pargs...) {}
-  virtual SourceOperandInterface *CreateSourceOperand() {
+  virtual SourceOperandInterface* CreateSourceOperand() {
     return new SourceOperandType(this);
   }
-  virtual DestinationOperandInterface *CreateDestinationOperand(int latency) {
+  virtual DestinationOperandInterface* CreateDestinationOperand(int latency) {
     return new DestinationOperandType(this, latency);
   }
-  virtual SourceOperandInterface *CreateSourceOperand(std::string op_name) {
+  virtual SourceOperandInterface* CreateSourceOperand(std::string op_name) {
     return new SourceOperandType(this, op_name);
   }
-  virtual DestinationOperandInterface *CreateDestinationOperand(
+  virtual DestinationOperandInterface* CreateDestinationOperand(
       int latency, std::string op_name) {
     return new DestinationOperandType(this, latency, op_name);
   }
@@ -88,28 +88,28 @@
 // element type. The element type should be uint8_t (so it is a byte array).
 template <typename BaseType, typename ElementType, typename SourceOperandType,
           typename DestinationOperandType>
-class StateItem<BaseType, ElementType *, SourceOperandType,
+class StateItem<BaseType, ElementType*, SourceOperandType,
                 DestinationOperandType> : public BaseType {
  public:
   using ValueType = ElementType;
   template <typename... Ps>
-  explicit StateItem(ArchState *arch_state, absl::string_view name, int width,
+  explicit StateItem(ArchState* arch_state, absl::string_view name, int width,
                      Ps... pargs)
       : BaseType(arch_state, name, {width}, sizeof(ElementType), pargs...) {
     static_assert(std::is_same<ElementType, uint8_t>::value,
                   "Element type must be 'uint8_t'");
   }
-  virtual SourceOperandInterface *CreateSourceOperand() {
+  virtual SourceOperandInterface* CreateSourceOperand() {
     return new SourceOperandType(this);
   }
-  virtual SourceOperandInterface *CreateSourceOperand(std::string op_name) {
+  virtual SourceOperandInterface* CreateSourceOperand(std::string op_name) {
     return new SourceOperandType(this, op_name);
   }
-  virtual DestinationOperandInterface *CreateDestinationOperand(
+  virtual DestinationOperandInterface* CreateDestinationOperand(
       int latency, std::string op_name) {
     return new DestinationOperandType(this, latency, op_name);
   }
-  virtual DestinationOperandInterface *CreateDestinationOperand(int latency) {
+  virtual DestinationOperandInterface* CreateDestinationOperand(int latency) {
     return new DestinationOperandType(this, latency);
   }
 };
@@ -122,12 +122,12 @@
  public:
   using ValueType = ElementType;
   template <typename... Ps>
-  explicit StateItem(ArchState *arch_state, absl::string_view name, Ps... pargs)
+  explicit StateItem(ArchState* arch_state, absl::string_view name, Ps... pargs)
       : BaseType(arch_state, name, {1}, sizeof(ElementType), pargs...) {}
-  virtual SourceOperandInterface *CreateSourceOperand() {
+  virtual SourceOperandInterface* CreateSourceOperand() {
     return new SourceOperandType(this);
   }
-  virtual SourceOperandInterface *CreateSourceOperand(std::string op_name) {
+  virtual SourceOperandInterface* CreateSourceOperand(std::string op_name) {
     return new SourceOperandType(this, op_name);
   }
 };
@@ -142,19 +142,19 @@
   static constexpr int kNumDimensions = 1;
   static constexpr int kShape[] = {N};
   template <typename... Ps>
-  explicit StateItem(ArchState *arch_state, absl::string_view name, Ps... pargs)
+  explicit StateItem(ArchState* arch_state, absl::string_view name, Ps... pargs)
       : BaseType(arch_state, name, {N}, sizeof(ElementType), pargs...) {}
   // Source/destination operand creation interface.
-  virtual SourceOperandInterface *CreateSourceOperand() {
+  virtual SourceOperandInterface* CreateSourceOperand() {
     return new SourceOperandType(this);
   }
-  virtual DestinationOperandInterface *CreateDestinationOperand(int latency) {
+  virtual DestinationOperandInterface* CreateDestinationOperand(int latency) {
     return new DestinationOperandType(this, latency);
   }
-  virtual SourceOperandInterface *CreateSourceOperand(std::string op_name) {
+  virtual SourceOperandInterface* CreateSourceOperand(std::string op_name) {
     return new SourceOperandType(this, op_name);
   }
-  virtual DestinationOperandInterface *CreateDestinationOperand(
+  virtual DestinationOperandInterface* CreateDestinationOperand(
       int latency, std::string op_name) {
     return new DestinationOperandType(this, latency, op_name);
   }
@@ -170,18 +170,18 @@
   static constexpr int kNumDimensions = 2;
   static constexpr int kShape[] = {M, N};
   template <typename... Ps>
-  explicit StateItem(ArchState *arch_state, absl::string_view name, Ps... pargs)
+  explicit StateItem(ArchState* arch_state, absl::string_view name, Ps... pargs)
       : BaseType(arch_state, name, {M, N}, sizeof(ElementType), pargs...) {}
-  virtual SourceOperandInterface *CreateSourceOperand() {
+  virtual SourceOperandInterface* CreateSourceOperand() {
     return new SourceOperandType(this);
   }
-  virtual DestinationOperandInterface *CreateDestinationOperand(int latency) {
+  virtual DestinationOperandInterface* CreateDestinationOperand(int latency) {
     return new DestinationOperandType(this, latency);
   }
-  virtual SourceOperandInterface *CreateSourceOperand(std::string op_name) {
+  virtual SourceOperandInterface* CreateSourceOperand(std::string op_name) {
     return new SourceOperandType(this, op_name);
   }
-  virtual DestinationOperandInterface *CreateDestinationOperand(
+  virtual DestinationOperandInterface* CreateDestinationOperand(
       int latency, std::string op_name) {
     return new DestinationOperandType(this, latency, op_name);
   }
diff --git a/mpact/sim/generic/state_item_base.cc b/mpact/sim/generic/state_item_base.cc
index 896a27b..a43809b 100644
--- a/mpact/sim/generic/state_item_base.cc
+++ b/mpact/sim/generic/state_item_base.cc
@@ -22,9 +22,9 @@
 namespace sim {
 namespace generic {
 
-StateItemBase::StateItemBase(class ArchState *arch_state,
+StateItemBase::StateItemBase(class ArchState* arch_state,
                              absl::string_view name,
-                             const std::vector<int> &shape, int element_size)
+                             const std::vector<int>& shape, int element_size)
     : arch_state_(arch_state),
       name_(name),
       shape_(shape),
diff --git a/mpact/sim/generic/state_item_base.h b/mpact/sim/generic/state_item_base.h
index 6ca3df4..455dd3a 100644
--- a/mpact/sim/generic/state_item_base.h
+++ b/mpact/sim/generic/state_item_base.h
@@ -36,14 +36,14 @@
 class StateItemBase : public DataBufferDestination {
  protected:
   // Only constructed from derived classes
-  StateItemBase(ArchState *arch_state, absl::string_view name,
-                const std::vector<int> &shape, int element_size);
+  StateItemBase(ArchState* arch_state, absl::string_view name,
+                const std::vector<int>& shape, int element_size);
   StateItemBase() = delete;
-  StateItemBase(const StateItemBase &) = delete;
+  StateItemBase(const StateItemBase&) = delete;
 
  public:
   // Name() returns the state item's name.
-  const std::string &name() const { return name_; }
+  const std::string& name() const { return name_; }
 
   // Returns the size vector of the state item. A scalar element has size
   // vector {1}, an N element vector item has size vector {N}, and
@@ -58,10 +58,10 @@
 
   // Returns the architecture state object that this simulated state is
   // associated with.
-  ArchState *arch_state() const { return arch_state_; }
+  ArchState* arch_state() const { return arch_state_; }
 
  private:
-  ArchState *arch_state_;
+  ArchState* arch_state_;
   std::string name_;
   std::vector<int> shape_;
   int element_size_;
diff --git a/mpact/sim/generic/status_register.h b/mpact/sim/generic/status_register.h
index b8f0416..e607e95 100644
--- a/mpact/sim/generic/status_register.h
+++ b/mpact/sim/generic/status_register.h
@@ -16,12 +16,14 @@
 #define MPACT_SIM_GENERIC_STATUS_REGISTER_H_
 
 #include <any>
+#include <cstdint>
 #include <string>
 #include <type_traits>
 #include <utility>
 #include <vector>
 
 #include "absl/functional/any_invocable.h"
+#include "absl/strings/string_view.h"
 #include "mpact/sim/generic/data_buffer.h"
 #include "mpact/sim/generic/operand_interface.h"
 #include "mpact/sim/generic/state_item.h"
@@ -51,13 +53,13 @@
   using Evaluate = absl::AnyInvocable<bool()>;
   // The constructor is in the protected section below. Others are deleted.
   StatusRegisterBase() = delete;
-  StatusRegisterBase(const StatusRegisterBase &) = delete;
-  StatusRegisterBase &operator=(const StatusRegisterBase &) = delete;
+  StatusRegisterBase(const StatusRegisterBase&) = delete;
+  StatusRegisterBase& operator=(const StatusRegisterBase&) = delete;
 
   T Read();
   T Read(T mask);
 
-  void SetDataBuffer(DataBuffer *db) override {
+  void SetDataBuffer(DataBuffer* db) override {
     // Read only state item, so just decrement the ref count and ignore.
     db->DecRef();
   }
@@ -68,8 +70,8 @@
 
  protected:
   // The constructor is called from StateItem<>
-  StatusRegisterBase(ArchState *state, absl::string_view name,
-                     const std::vector<int> &shape, int unit_size);
+  StatusRegisterBase(ArchState* state, absl::string_view name,
+                     const std::vector<int>& shape, int unit_size);
 
  private:
   std::vector<Evaluate> evaluate_;
@@ -77,9 +79,9 @@
 };
 
 template <typename T>
-StatusRegisterBase<T>::StatusRegisterBase(ArchState *state,
+StatusRegisterBase<T>::StatusRegisterBase(ArchState* state,
                                           absl::string_view name,
-                                          const std::vector<int> &shape,
+                                          const std::vector<int>& shape,
                                           int unit_size)
     : StateItemBase(state, name, shape, unit_size), size_(sizeof(T) * 8) {
   // Initialize the evaluate functions to lambdas that return false.
@@ -119,10 +121,10 @@
 class StatusRegisterSourceOperand : public SourceOperandInterface {
  public:
   // Construtor. Note, default constructor deleted.
-  StatusRegisterSourceOperand(StatusRegisterBase<T> *status_reg,
+  StatusRegisterSourceOperand(StatusRegisterBase<T>* status_reg,
                               std::string op_name)
       : status_register_(status_reg), op_name_(op_name) {}
-  explicit StatusRegisterSourceOperand(StatusRegisterBase<T> *status_reg)
+  explicit StatusRegisterSourceOperand(StatusRegisterBase<T>* status_reg)
       : StatusRegisterSourceOperand(status_reg, status_reg->name()) {}
   StatusRegisterSourceOperand() = delete;
 
@@ -164,7 +166,7 @@
   std::string AsString() const override { return op_name_; }
 
  private:
-  StatusRegisterBase<T> *status_register_;
+  StatusRegisterBase<T>* status_register_;
   std::string op_name_;
 };
 
@@ -172,7 +174,7 @@
 // used without template arguments, deducing the type from the constructor
 // argument instead.
 template <typename T>
-StatusRegisterSourceOperand(StatusRegisterBase<T> *)
+StatusRegisterSourceOperand(StatusRegisterBase<T>*)
     -> StatusRegisterSourceOperand<T>;
 
 template <typename ElementType>
diff --git a/mpact/sim/generic/test/BUILD b/mpact/sim/generic/test/BUILD
index 55063dd..6225cf3 100644
--- a/mpact/sim/generic/test/BUILD
+++ b/mpact/sim/generic/test/BUILD
@@ -73,7 +73,6 @@
     deps = [
         "//mpact/sim/generic:arch_state",
         "//mpact/sim/generic:core",
-        "@com_google_absl//absl/memory",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
     ],
@@ -86,7 +85,6 @@
     deps = [
         "//mpact/sim/generic:arch_state",
         "//mpact/sim/generic:core",
-        "@com_google_absl//absl/memory",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
     ],
@@ -109,11 +107,9 @@
     srcs = ["fifo_test.cc"],
     deps = [
         "//mpact/sim/generic:arch_state",
-        "//mpact/sim/generic:config",
         "//mpact/sim/generic:core",
         "//mpact/sim/generic:program_error",
         "//mpact/sim/proto:component_data_cc_proto",
-        "@com_google_absl//absl/memory",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
         "@com_google_protobuf//:protobuf",
@@ -127,8 +123,6 @@
     deps = [
         "//mpact/sim/generic:arch_state",
         "//mpact/sim/generic:core",
-        "//mpact/sim/generic:program_error",
-        "@com_google_absl//absl/memory",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
     ],
@@ -142,7 +136,6 @@
         "//mpact/sim/generic:arch_state",
         "//mpact/sim/generic:core",
         "//mpact/sim/generic:program_error",
-        "@com_google_absl//absl/memory",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
     ],
@@ -154,7 +147,6 @@
     srcs = ["immediate_operand_test.cc"],
     deps = [
         "//mpact/sim/generic:core",
-        "@com_google_absl//absl/memory",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
     ],
@@ -179,7 +171,7 @@
     deps = [
         "//mpact/sim/generic:arch_state",
         "//mpact/sim/generic:core",
-        "@com_google_absl//absl/memory",
+        "@com_google_absl//absl/strings",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
     ],
@@ -244,6 +236,7 @@
     deps = [
         "//mpact/sim/generic:core",
         "//mpact/sim/generic:instruction",
+        "@com_google_absl//absl/types:span",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
     ],
@@ -291,6 +284,8 @@
     deps = [
         "//mpact/sim/generic:arch_state",
         "//mpact/sim/generic:core",
+        "@com_google_absl//absl/strings",
+        "@com_google_absl//absl/types:span",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
     ],
@@ -302,7 +297,10 @@
     srcs = ["complex_resource_operand_test.cc"],
     deps = [
         "//mpact/sim/generic:arch_state",
+        "//mpact/sim/generic:core",
         "@com_google_absl//absl/status",
+        "@com_google_absl//absl/strings",
+        "@com_google_absl//absl/types:span",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
     ],
@@ -316,7 +314,6 @@
         "//mpact/sim/generic:config",
         "//mpact/sim/proto:component_data_cc_proto",
         "@com_google_absl//absl/container:btree",
-        "@com_google_absl//absl/memory",
         "@com_google_absl//absl/status",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
@@ -333,6 +330,7 @@
         "//mpact/sim/generic:config",
         "//mpact/sim/generic:counters",
         "//mpact/sim/proto:component_data_cc_proto",
+        "@com_google_absl//absl/status",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
         "@com_google_protobuf//:protobuf",
@@ -349,8 +347,6 @@
         "//mpact/sim/generic:counters",
         "//mpact/sim/proto:component_data_cc_proto",
         "@com_google_absl//absl/strings",
-        "@com_google_absl//absl/types:optional",
-        "@com_google_absl//absl/types:variant",
         "@com_google_googletest//:gtest",
         "@com_google_googletest//:gtest_main",
         "@com_google_protobuf//:protobuf",
diff --git a/mpact/sim/generic/test/arch_state_test.cc b/mpact/sim/generic/test/arch_state_test.cc
index c56a31e..2bb9a9e 100644
--- a/mpact/sim/generic/test/arch_state_test.cc
+++ b/mpact/sim/generic/test/arch_state_test.cc
@@ -19,11 +19,11 @@
 #include <string>
 #include <vector>
 
+#include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "googlemock/include/gmock/gmock.h"
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/delay_line.h"
-#include "mpact/sim/generic/delay_line_interface.h"
 #include "mpact/sim/generic/fifo.h"
 #include "mpact/sim/generic/operand_interface.h"
 #include "mpact/sim/generic/register.h"
@@ -49,11 +49,11 @@
 
 // Define a new delay line type.
 struct IntDelayRecord {
-  int *destination;
+  int* destination;
   int value;
   void Apply() { *destination = value; }
   IntDelayRecord() = delete;
-  IntDelayRecord(int *dest, int val) : destination(dest), value(val) {}
+  IntDelayRecord(int* dest, int val) : destination(dest), value(val) {}
 };
 
 using IntDelayLine = DelayLine<IntDelayRecord>;
@@ -98,7 +98,7 @@
 // protected.
 class MyArchState : public ArchState {
  public:
-  MyArchState(absl::string_view id, SourceOperandInterface *pc_op)
+  MyArchState(absl::string_view id, SourceOperandInterface* pc_op)
       : ArchState(id, pc_op) {}
   explicit MyArchState(absl::string_view id) : MyArchState(id, nullptr) {}
 };
@@ -121,7 +121,7 @@
   ~ArchStateTest() override { delete arch_state_; }
 
   MyProgramCounter my_pc_;
-  ArchState *arch_state_;
+  ArchState* arch_state_;
 };
 
 // Test that the ArchState instance is properly initialized.
@@ -131,7 +131,7 @@
   EXPECT_THAT(arch_state_->program_error_controller()->name(),
               StrEq("TestArchitectureErrors"));
   EXPECT_EQ(arch_state_->pc_operand(),
-            static_cast<SourceOperandInterface *>(&my_pc_));
+            static_cast<SourceOperandInterface*>(&my_pc_));
   for (int reg_no = 0; reg_no < 16; reg_no++) {
     EXPECT_THAT(arch_state_->registers()->find(absl::StrCat("R", reg_no)),
                 Ne(arch_state_->registers()->end()));
@@ -163,7 +163,7 @@
 
 // Test creation of a new delay line and that it gets advanced by ArchState.
 TEST_F(ArchStateTest, AddDelayLine) {
-  IntDelayLine *int_delay_line =
+  IntDelayLine* int_delay_line =
       arch_state_->CreateAndAddDelayLine<IntDelayLine>();
   int my_value = 0;
   int_delay_line->Add(1, &my_value, 1);
@@ -185,15 +185,15 @@
 
 // Test alternate ways to add registers.
 TEST_F(ArchStateTest, AddRegister) {
-  auto *reg = new ScalarRegister(arch_state_, kRegName1);
+  auto* reg = new ScalarRegister(arch_state_, kRegName1);
   arch_state_->AddRegister(reg);
   // Also add the register with an alias.
   arch_state_->AddRegister(kRegName2, reg);
   auto iter = arch_state_->registers()->find(kRegName1);
-  auto *reg1 =
+  auto* reg1 =
       (iter == arch_state_->registers()->end()) ? nullptr : iter->second;
   iter = arch_state_->registers()->find(kRegName2);
-  auto *reg2 =
+  auto* reg2 =
       (iter == arch_state_->registers()->end()) ? nullptr : iter->second;
   EXPECT_EQ(reg1, reg);
   EXPECT_EQ(reg2, reg);
@@ -208,14 +208,14 @@
 
 // Test alternate ways to add registers.
 TEST_F(ArchStateTest, AddFifo) {
-  auto *fifo = new ScalarFifo(arch_state_, kFifoName1, 8);
+  auto* fifo = new ScalarFifo(arch_state_, kFifoName1, 8);
   arch_state_->AddFifo(fifo);
   // Add fifo with an alias.
   arch_state_->AddFifo(kFifoName2, fifo);
   auto iter = arch_state_->fifos()->find(kFifoName1);
-  auto *fifo1 = (iter == arch_state_->fifos()->end()) ? nullptr : iter->second;
+  auto* fifo1 = (iter == arch_state_->fifos()->end()) ? nullptr : iter->second;
   iter = arch_state_->fifos()->find(kFifoName2);
-  auto *fifo2 = (iter == arch_state_->fifos()->end()) ? nullptr : iter->second;
+  auto* fifo2 = (iter == arch_state_->fifos()->end()) ? nullptr : iter->second;
   EXPECT_EQ(fifo1, fifo);
   EXPECT_EQ(fifo2, fifo);
   arch_state_->RemoveFifo(kFifoName2);
diff --git a/mpact/sim/generic/test/complex_resource_operand_test.cc b/mpact/sim/generic/test/complex_resource_operand_test.cc
index 3532c6f..d603c67 100644
--- a/mpact/sim/generic/test/complex_resource_operand_test.cc
+++ b/mpact/sim/generic/test/complex_resource_operand_test.cc
@@ -14,9 +14,17 @@
 
 #include "mpact/sim/generic/complex_resource_operand.h"
 
+#include <cstddef>
+#include <cstdint>
+
 #include "absl/status/status.h"
+#include "absl/strings/string_view.h"
+#include "absl/types/span.h"
 #include "googlemock/include/gmock/gmock.h"
 #include "googletest/include/gtest/gtest.h"
+#include "mpact/sim/generic/arch_state.h"
+#include "mpact/sim/generic/complex_resource.h"
+#include "mpact/sim/generic/operand_interface.h"
 
 namespace {
 
@@ -51,7 +59,7 @@
 // access the clock.
 class MockArchState : public ArchState {
  public:
-  MockArchState(absl::string_view id, SourceOperandInterface *pc_op)
+  MockArchState(absl::string_view id, SourceOperandInterface* pc_op)
       : ArchState(id, pc_op) {}
   explicit MockArchState(absl::string_view id) : MockArchState(id, nullptr) {}
   void set_cycle(uint64_t value) { ArchState::set_cycle(value); }
@@ -73,9 +81,9 @@
     delete arch_state_;
   }
 
-  MockArchState *arch_state_;
-  ComplexResource *resource_;
-  ComplexResourceOperand *operand_;
+  MockArchState* arch_state_;
+  ComplexResource* resource_;
+  ComplexResourceOperand* operand_;
 };
 
 // Create and check name.
@@ -85,7 +93,7 @@
 
 // Check error status from setting the cycle mask.
 TEST_F(ComplexResourceOperandTest, CycleMask) {
-  auto *op = new ComplexResourceOperand(nullptr);
+  auto* op = new ComplexResourceOperand(nullptr);
   EXPECT_TRUE(absl::IsInternal(op->SetCycleMask(kLow, kHigh)));
   EXPECT_TRUE(absl::IsInvalidArgument(operand_->SetCycleMask(kHigh, kLow)));
   EXPECT_TRUE(
diff --git a/mpact/sim/generic/test/complex_resource_test.cc b/mpact/sim/generic/test/complex_resource_test.cc
index ef400ef..62eaa5c 100644
--- a/mpact/sim/generic/test/complex_resource_test.cc
+++ b/mpact/sim/generic/test/complex_resource_test.cc
@@ -14,9 +14,14 @@
 
 #include "mpact/sim/generic/complex_resource.h"
 
+#include <cstddef>
+#include <cstdint>
 #include <ostream>
 
-#include "googlemock/include/gmock/gmock.h"
+#include "absl/strings/str_cat.h"
+#include "absl/strings/string_view.h"
+#include "absl/types/span.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/arch_state.h"
 #include "mpact/sim/generic/operand_interface.h"
@@ -41,7 +46,7 @@
 
 class MockArchState : public ArchState {
  public:
-  MockArchState(absl::string_view id, SourceOperandInterface *pc_op)
+  MockArchState(absl::string_view id, SourceOperandInterface* pc_op)
       : ArchState(id, pc_op) {}
   explicit MockArchState(absl::string_view id) : MockArchState(id, nullptr) {}
   void set_cycle(uint64_t value) { ArchState::set_cycle(value); }
@@ -53,11 +58,11 @@
 
   ~ComplexResourceTest() override { delete arch_state_; }
 
-  MockArchState *arch_state_;
+  MockArchState* arch_state_;
 };
 
 TEST_F(ComplexResourceTest, Construct) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, kCycleDepth);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, kCycleDepth);
   EXPECT_EQ(resource->bit_array().size(), (kCycleDepth + 63) / 64);
   EXPECT_EQ(resource->name(), kResourceName);
   EXPECT_EQ(resource->AsString(), kResourceName);
@@ -66,7 +71,7 @@
 
 // Verify that all bits are free to start out with.
 TEST_F(ComplexResourceTest, IsFreeMarchingOne) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, kCycleDepth);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, kCycleDepth);
   uint64_t marching_one[4] = {0x8000'0000'0000'0000, 0, 0, 0};
   for (size_t i = 0; i < kCycleDepth; i++) {
     EXPECT_TRUE(resource->IsFree(marching_one)) << i;
@@ -83,7 +88,7 @@
 
 // Reserve all bits, verify that they are set.
 TEST_F(ComplexResourceTest, IsBusyMarchingOne) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, kCycleDepth);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, kCycleDepth);
   resource->Acquire(kAllOnes234);
   uint64_t marching_one[4] = {0x8000'0000'0000'0000, 0, 0, 0};
   for (size_t i = 0; i < kCycleDepth; i++) {
@@ -102,7 +107,7 @@
 // Acquire the resource for all the cycles. Then check if it is available and
 // try to acquire it. Release the resource for that cycle, then try again.
 TEST_F(ComplexResourceTest, AcquireRelease) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, kCycleDepth);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, kCycleDepth);
   resource->Acquire(kAllOnes234);
   uint64_t marching_one[4] = {0x8000'0000'0000'0000, 0, 0, 0};
   for (size_t i = 0; i < kCycleDepth; i++) {
@@ -125,7 +130,7 @@
 // Acquires the resource for all cycles. Then advances the clock and checks if
 // the resource is free in the last cycle, next to last cycle, etc.
 TEST_F(ComplexResourceTest, SingleWordBy1) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, 64);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, 64);
   EXPECT_TRUE(resource->IsFree(kAllOnes234));
   resource->Acquire(kAllOnes234);
   EXPECT_FALSE(resource->IsFree(kAllOnes234));
@@ -154,7 +159,7 @@
 
 // Same as above, but advanced the clock by 3.
 TEST_F(ComplexResourceTest, SingleWordBy3) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, 64);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, 64);
   EXPECT_TRUE(resource->IsFree(kAllOnes234));
   resource->Acquire(kAllOnes234);
   EXPECT_FALSE(resource->IsFree(kAllOnes234));
@@ -185,7 +190,7 @@
 // Acquires the resource for all cycles. Then advances the clock and checks if
 // the resource is free in the last cycle, next to last cycle, etc.
 TEST_F(ComplexResourceTest, QuadWordBy1) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, 256);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, 256);
   EXPECT_TRUE(resource->IsFree(kAllOnes256));
   resource->Acquire(kAllOnes256);
   EXPECT_FALSE(resource->IsFree(kAllOnes256));
@@ -219,7 +224,7 @@
 
 // Same as above, but advances the clock by 7 cycles at a time.
 TEST_F(ComplexResourceTest, QuadWordBy5) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, 256);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, 256);
   EXPECT_TRUE(resource->IsFree(kAllOnes256));
   resource->Acquire(kAllOnes256);
   EXPECT_FALSE(resource->IsFree(kAllOnes256));
@@ -253,7 +258,7 @@
 
 // Check that advancing clock by more than 256 yields free resource.
 TEST_F(ComplexResourceTest, ShiftGreaterThan256) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, 256);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, 256);
   EXPECT_TRUE(resource->IsFree(kAllOnes256));
   resource->Acquire(kAllOnes256);
   EXPECT_FALSE(resource->IsFree(kAllOnes256));
@@ -264,7 +269,7 @@
 
 // Verify that shifts over 64 bits work.
 TEST_F(ComplexResourceTest, ShiftGreaterThan64) {
-  auto *resource = new ComplexResource(arch_state_, kResourceName, 256);
+  auto* resource = new ComplexResource(arch_state_, kResourceName, 256);
   EXPECT_TRUE(resource->IsFree(kAllOnes256));
   resource->Acquire(kAllOnes256);
   EXPECT_FALSE(resource->IsFree(kAllOnes64));
diff --git a/mpact/sim/generic/test/component_test.cc b/mpact/sim/generic/test/component_test.cc
index 7ed65fc..299fa8f 100644
--- a/mpact/sim/generic/test/component_test.cc
+++ b/mpact/sim/generic/test/component_test.cc
@@ -17,7 +17,8 @@
 #include <cstdint>
 #include <memory>
 
-#include "googlemock/include/gmock/gmock.h"
+#include "absl/status/status.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/config.h"
 #include "mpact/sim/generic/counters.h"
@@ -116,15 +117,15 @@
         int64_config_(kInt64ConfigName, kInt64ConfigValue),
         uint64_config_(kUint64ConfigName, kUint64ConfigValue) {}
 
-  Component &top() { return top_; }
-  Component &child() { return child_; }
-  SimpleCounter<int64_t> &int64_counter() { return int64_counter_; }
-  SimpleCounter<uint64_t> &uint64_counter() { return uint64_counter_; }
-  SimpleCounter<uint64_t> &uninitialized_counter() {
+  Component& top() { return top_; }
+  Component& child() { return child_; }
+  SimpleCounter<int64_t>& int64_counter() { return int64_counter_; }
+  SimpleCounter<uint64_t>& uint64_counter() { return uint64_counter_; }
+  SimpleCounter<uint64_t>& uninitialized_counter() {
     return uninitialized_counter_;
   }
-  Config<int64_t> &int64_config() { return int64_config_; }
-  Config<uint64_t> &uint64_config() { return uint64_config_; }
+  Config<int64_t>& int64_config() { return int64_config_; }
+  Config<uint64_t>& uint64_config() { return uint64_config_; }
 
  private:
   Component top_;
@@ -157,9 +158,9 @@
 // Add counter objects to the two components. Ensure that the counters are
 // found in the expected component.
 TEST_F(ComponentTest, ComponentsWithCounters) {
-  auto *top_counter = &int64_counter();
-  auto *child_counter = &uint64_counter();
-  auto *uninit_counter = &uninitialized_counter();
+  auto* top_counter = &int64_counter();
+  auto* child_counter = &uint64_counter();
+  auto* uninit_counter = &uninitialized_counter();
 
   EXPECT_TRUE(top().AddCounter(top_counter).ok());
   EXPECT_TRUE(child().AddCounter(child_counter).ok());
@@ -174,8 +175,8 @@
 // Add config objects to the two components. Ensure that the config objects
 // are found in the expected component.
 TEST_F(ComponentTest, ComponentsWithConfigs) {
-  auto *top_config = &int64_config();
-  auto *child_config = &uint64_config();
+  auto* top_config = &int64_config();
+  auto* child_config = &uint64_config();
 
   EXPECT_TRUE(top().AddConfig(top_config).ok());
   EXPECT_TRUE(child().AddConfig(child_config).ok());
@@ -201,13 +202,13 @@
 // then export the components to a proto, and verify the proto against the
 // expected value.
 TEST_F(ComponentTest, ExportTest) {
-  auto *top_config = &int64_config();
-  auto *child_config = &uint64_config();
+  auto* top_config = &int64_config();
+  auto* child_config = &uint64_config();
   EXPECT_TRUE(top().AddConfig(top_config).ok());
   EXPECT_TRUE(child().AddConfig(child_config).ok());
 
-  auto *top_counter = &int64_counter();
-  auto *child_counter = &uint64_counter();
+  auto* top_counter = &int64_counter();
+  auto* child_counter = &uint64_counter();
   EXPECT_TRUE(top().AddCounter(top_counter).ok());
   EXPECT_TRUE(child().AddCounter(child_counter).ok());
 
@@ -219,13 +220,13 @@
 
 // Failed import due to missing top-level name.
 TEST_F(ComponentTest, ImportTestNameMissing) {
-  auto *top_config = &int64_config();
-  auto *child_config = &uint64_config();
+  auto* top_config = &int64_config();
+  auto* child_config = &uint64_config();
   EXPECT_TRUE(top().AddConfig(top_config).ok());
   EXPECT_TRUE(child().AddConfig(child_config).ok());
 
-  auto *top_counter = &int64_counter();
-  auto *child_counter = &uint64_counter();
+  auto* top_counter = &int64_counter();
+  auto* child_counter = &uint64_counter();
   EXPECT_TRUE(top().AddCounter(top_counter).ok());
   EXPECT_TRUE(child().AddCounter(child_counter).ok());
 
@@ -238,13 +239,13 @@
 
 // Failed import due to malformed component data.
 TEST_F(ComponentTest, ImportTestMalformed) {
-  auto *top_config = &int64_config();
-  auto *child_config = &uint64_config();
+  auto* top_config = &int64_config();
+  auto* child_config = &uint64_config();
   EXPECT_TRUE(top().AddConfig(top_config).ok());
   EXPECT_TRUE(child().AddConfig(child_config).ok());
 
-  auto *top_counter = &int64_counter();
-  auto *child_counter = &uint64_counter();
+  auto* top_counter = &int64_counter();
+  auto* child_counter = &uint64_counter();
   EXPECT_TRUE(top().AddCounter(top_counter).ok());
   EXPECT_TRUE(child().AddCounter(child_counter).ok());
 
@@ -257,13 +258,13 @@
 
 // Failed import due to missing child name.
 TEST_F(ComponentTest, ImportTestChildNameMissing) {
-  auto *top_config = &int64_config();
-  auto *child_config = &uint64_config();
+  auto* top_config = &int64_config();
+  auto* child_config = &uint64_config();
   EXPECT_TRUE(top().AddConfig(top_config).ok());
   EXPECT_TRUE(child().AddConfig(child_config).ok());
 
-  auto *top_counter = &int64_counter();
-  auto *child_counter = &uint64_counter();
+  auto* top_counter = &int64_counter();
+  auto* child_counter = &uint64_counter();
   EXPECT_TRUE(top().AddCounter(top_counter).ok());
   EXPECT_TRUE(child().AddCounter(child_counter).ok());
 
@@ -276,13 +277,13 @@
 
 // Failed import due to top level name mismatch.
 TEST_F(ComponentTest, ImportTestNameMismatch) {
-  auto *top_config = &int64_config();
-  auto *child_config = &uint64_config();
+  auto* top_config = &int64_config();
+  auto* child_config = &uint64_config();
   EXPECT_TRUE(top().AddConfig(top_config).ok());
   EXPECT_TRUE(child().AddConfig(child_config).ok());
 
-  auto *top_counter = &int64_counter();
-  auto *child_counter = &uint64_counter();
+  auto* top_counter = &int64_counter();
+  auto* child_counter = &uint64_counter();
   EXPECT_TRUE(top().AddCounter(top_counter).ok());
   EXPECT_TRUE(child().AddCounter(child_counter).ok());
 
@@ -296,13 +297,13 @@
 // Import a proto into the components. Verify that the value of config entries
 // are updated, but the counters are not.
 TEST_F(ComponentTest, ImportTest) {
-  auto *top_config = &int64_config();
-  auto *child_config = &uint64_config();
+  auto* top_config = &int64_config();
+  auto* child_config = &uint64_config();
   EXPECT_TRUE(top().AddConfig(top_config).ok());
   EXPECT_TRUE(child().AddConfig(child_config).ok());
 
-  auto *top_counter = &int64_counter();
-  auto *child_counter = &uint64_counter();
+  auto* top_counter = &int64_counter();
+  auto* child_counter = &uint64_counter();
   EXPECT_TRUE(top().AddCounter(top_counter).ok());
   EXPECT_TRUE(child().AddCounter(child_counter).ok());
 
diff --git a/mpact/sim/generic/test/config_test.cc b/mpact/sim/generic/test/config_test.cc
index 47ae18a..45f061f 100644
--- a/mpact/sim/generic/test/config_test.cc
+++ b/mpact/sim/generic/test/config_test.cc
@@ -196,7 +196,7 @@
   // and exporting it to a proto. Saving the configuration after a simulation
   // is useful in post analysis to be able to tie together the configuration
   // information and the collected statistics.
-  std::vector<ConfigBase *> config_vector;
+  std::vector<ConfigBase*> config_vector;
   config_vector.push_back(&bool_config);
   config_vector.push_back(&int64_config);
   config_vector.push_back(&uint64_config);
@@ -204,8 +204,8 @@
   config_vector.push_back(&string_config);
 
   auto exported_proto = std::make_unique<ComponentData>();
-  ComponentValueEntry *entry;
-  for (auto const &config : config_vector) {
+  ComponentValueEntry* entry;
+  for (auto const& config : config_vector) {
     entry = exported_proto->add_configuration();
     EXPECT_TRUE(config->Export(entry).ok());
   }
@@ -231,7 +231,7 @@
   // Add the configuration entries to a map from name to ConfigBase. This is to
   // mimic a use case where a proto is read in for a software component and the
   // values are imported into its configuration entries (stored in a registry).
-  absl::btree_map<std::string, ConfigBase *> config_map;
+  absl::btree_map<std::string, ConfigBase*> config_map;
   config_map.insert(std::make_pair(bool_config.name(), &bool_config));
   config_map.insert(std::make_pair(int64_config.name(), &int64_config));
   config_map.insert(std::make_pair(uint64_config.name(), &uint64_config));
@@ -245,9 +245,9 @@
   // For each configuration entry, look up a config entry with a matching name
   // and import the proto value to the config.
   for (int index = 0; index < fromText.configuration_size(); index++) {
-    const ComponentValueEntry &entry = fromText.configuration(index);
+    const ComponentValueEntry& entry = fromText.configuration(index);
     if (entry.has_name() && config_map.contains(entry.name())) {
-      ConfigBase *config = config_map.at(entry.name());
+      ConfigBase* config = config_map.at(entry.name());
       EXPECT_TRUE(config->Import(&entry).ok());
     }
   }
@@ -268,7 +268,7 @@
   Config<double> double_config(kDoubleConfigName);
   Config<std::string> string_config(kStringConfigName);
 
-  std::vector<ConfigBase *> config_vector;
+  std::vector<ConfigBase*> config_vector;
   config_vector.push_back(&bool_config);
   config_vector.push_back(&int64_config);
   config_vector.push_back(&uint64_config);
@@ -276,7 +276,7 @@
   config_vector.push_back(&string_config);
 
   // Expect each import to fail with invalid argument.
-  for (auto *config : config_vector) {
+  for (auto* config : config_vector) {
     EXPECT_TRUE(absl::IsInvalidArgument(config->Import(nullptr)));
   }
 }
@@ -289,7 +289,7 @@
   Config<double> double_config(kDoubleConfigName);
   Config<std::string> string_config(kStringConfigName);
 
-  std::vector<ConfigBase *> config_vector;
+  std::vector<ConfigBase*> config_vector;
   config_vector.push_back(&bool_config);
   config_vector.push_back(&int64_config);
   config_vector.push_back(&uint64_config);
@@ -301,7 +301,7 @@
   EXPECT_TRUE(
       google::protobuf::TextFormat::ParseFromString(kProtoNoName, &fromText));
   // Expect each import to fail with internal error.
-  const ComponentValueEntry &entry = fromText.configuration(0);
+  const ComponentValueEntry& entry = fromText.configuration(0);
   for (int index = 0; index < fromText.configuration_size(); index++) {
     EXPECT_TRUE(absl::IsInternal(config_vector[index]->Import(&entry)));
   }
@@ -315,7 +315,7 @@
   Config<double> double_config(kDoubleConfigName);
   Config<std::string> string_config(kStringConfigName);
 
-  std::vector<ConfigBase *> config_vector;
+  std::vector<ConfigBase*> config_vector;
   config_vector.push_back(&bool_config);
   config_vector.push_back(&int64_config);
   config_vector.push_back(&uint64_config);
@@ -329,7 +329,7 @@
   // Expect each import to fail with internal error, as the proto message
   // passed in has a name that doesn't match the configuration entry.
   for (int index = 0; index < fromText.configuration_size(); index++) {
-    const ComponentValueEntry &entry = fromText.configuration(index);
+    const ComponentValueEntry& entry = fromText.configuration(index);
     EXPECT_TRUE(absl::IsInternal(config_vector[index]->Import(&entry)));
   }
 }
@@ -345,7 +345,7 @@
   // Add the configuration entries to a map from name to ConfigBase. This is to
   // mimic a use case where a proto is read in for a software component and the
   // values are imported into its configuration entries (stored in a registry).
-  absl::btree_map<std::string, ConfigBase *> config_map;
+  absl::btree_map<std::string, ConfigBase*> config_map;
   config_map.insert(std::make_pair(bool_config.name(), &bool_config));
   config_map.insert(std::make_pair(int64_config.name(), &int64_config));
   config_map.insert(std::make_pair(uint64_config.name(), &uint64_config));
@@ -361,9 +361,9 @@
   // mismatches to the type of the config entry they should all fail with
   // internal errors.
   for (int index = 0; index < fromText.configuration_size(); index++) {
-    const ComponentValueEntry &entry = fromText.configuration(index);
+    const ComponentValueEntry& entry = fromText.configuration(index);
     if (entry.has_name() && config_map.contains(entry.name())) {
-      ConfigBase *config = config_map.at(entry.name());
+      ConfigBase* config = config_map.at(entry.name());
       EXPECT_TRUE(absl::IsInternal(config->Import(&entry)));
     }
   }
diff --git a/mpact/sim/generic/test/control_register_test.cc b/mpact/sim/generic/test/control_register_test.cc
index bc77f6e..1a72675 100644
--- a/mpact/sim/generic/test/control_register_test.cc
+++ b/mpact/sim/generic/test/control_register_test.cc
@@ -17,10 +17,10 @@
 #include <cstdint>
 #include <memory>
 
-#include "absl/memory/memory.h"
 #include "googlemock/include/gmock/gmock.h"
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/data_buffer.h"
+#include "mpact/sim/generic/register.h"
 
 namespace {
 
@@ -36,13 +36,13 @@
 
   ~ControlRegisterTest() override { delete db_factory_; }
 
-  DataBufferFactory *db_factory_;
+  DataBufferFactory* db_factory_;
 };
 
 // Create scalar register and verify attributes.
 TEST_F(ControlRegisterTest, Create) {
   auto scalar_reg = std::make_unique<TestRegister>(
-      nullptr, "R0", [](ControlRegisterBase *, DataBuffer *) {});
+      nullptr, "R0", [](ControlRegisterBase*, DataBuffer*) {});
   EXPECT_THAT(scalar_reg->name(), StrEq("R0"));
   EXPECT_EQ(scalar_reg->shape().size(), 1);
   EXPECT_EQ(scalar_reg->size(), sizeof(uint32_t));
@@ -53,14 +53,14 @@
   bool works = false;
   // Allocate register and make sure data_buffer is nullptr.
   auto reg = std::make_unique<TestRegister>(
-      nullptr, "R0", [&works](ControlRegisterBase *creg, DataBuffer *db) {
+      nullptr, "R0", [&works](ControlRegisterBase* creg, DataBuffer* db) {
         works = true;
         creg->RegisterBase::SetDataBuffer(db);
       });
   EXPECT_EQ(reg->data_buffer(), nullptr);
 
   // Allocate a data buffer of the right byte size and bind it to the register.
-  DataBuffer *db = db_factory_->Allocate(reg->size());
+  DataBuffer* db = db_factory_->Allocate(reg->size());
   reg->SetDataBuffer(db);
 
   EXPECT_TRUE(works);
diff --git a/mpact/sim/generic/test/counters_test.cc b/mpact/sim/generic/test/counters_test.cc
index 045fe8d..00d4726 100644
--- a/mpact/sim/generic/test/counters_test.cc
+++ b/mpact/sim/generic/test/counters_test.cc
@@ -24,10 +24,9 @@
 
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
-#include "absl/types/optional.h"
-#include "absl/types/variant.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
+#include "mpact/sim/generic/counters_base.h"
 #include "mpact/sim/proto/component_data.pb.h"
 #include "src/google/protobuf/text_format.h"
 
@@ -65,7 +64,7 @@
 template <typename T>
 class Max {
  public:
-  bool operator()(const T &in, T *out) {
+  bool operator()(const T& in, T* out) {
     if (value_.has_value() && (in <= *value_)) return false;
     value_ = in;
     *out = in;
@@ -83,7 +82,7 @@
 class Count {
  public:
   template <typename T>
-  bool operator()(const T &in, int64_t *out) {
+  bool operator()(const T& in, int64_t* out) {
     *out = ++value_;
     return true;
   }
@@ -157,7 +156,7 @@
   CounterValue cv = int64_counter.GetCounterValue();
   EXPECT_EQ(std::get<int64_t>(cv), kMinusFive);
   EXPECT_EQ(int64_counter.ToString(), absl::StrCat(kMinusFive));
-  EXPECT_EQ(static_cast<mpact::sim::generic::CounterValueOutputBase<int64_t> *>(
+  EXPECT_EQ(static_cast<mpact::sim::generic::CounterValueOutputBase<int64_t>*>(
                 &int64_counter)
                 ->ToString(),
             absl::StrCat(kMinusFive));
@@ -210,7 +209,7 @@
   std::vector<double> values = {1.1, 5.2, 3.3, 9.4, 2.5, 0.6};
   // Pass in default constructed instance of Max<double>.
   FunctionCounter<double> max("max", Max<double>());
-  for (auto const &val : values) {
+  for (auto const& val : values) {
     max.SetValue(val);
   }
   // Verify that the computed max is the same as that computed by max_element.
@@ -222,7 +221,7 @@
   std::vector<double> values = {1.1, 5.2, 3.3, 9.4, 2.5, 0.6};
   // Pass in default constructed instance of Count<double>.
   FunctionCounter<double, int64_t> count("count", Count());
-  for (auto const &val : values) {
+  for (auto const& val : values) {
     count.SetValue(val);
   }
   // Verify that the element count is the same as the vector size.
@@ -241,14 +240,14 @@
   // is an intended use case for reading out the values of the counters and
   // exporting it to a proto in order to save the simulation results at the end
   // of a run.
-  std::vector<CounterBaseInterface *> counter_vector;
+  std::vector<CounterBaseInterface*> counter_vector;
   counter_vector.push_back(&int64_counter);
   counter_vector.push_back(&uint64_counter);
   counter_vector.push_back(&double_counter);
 
   auto exported_proto = std::make_unique<ComponentData>();
-  ComponentValueEntry *entry;
-  for (auto const &counter : counter_vector) {
+  ComponentValueEntry* entry;
+  for (auto const& counter : counter_vector) {
     entry = exported_proto->add_statistics();
     EXPECT_TRUE(counter->Export(entry).ok());
   }
diff --git a/mpact/sim/generic/test/data_buffer_test.cc b/mpact/sim/generic/test/data_buffer_test.cc
index e2d464b..2bb00ba 100644
--- a/mpact/sim/generic/test/data_buffer_test.cc
+++ b/mpact/sim/generic/test/data_buffer_test.cc
@@ -14,6 +14,7 @@
 
 #include "mpact/sim/generic/data_buffer.h"
 
+#include <cstddef>
 #include <cstdint>
 #include <vector>
 
@@ -32,17 +33,17 @@
 
   ~DataBufferTest() override { delete db_factory_; }
 
-  DataBufferFactory *db_factory_;
+  DataBufferFactory* db_factory_;
 };
 
 // Test that DataBufferFactory allocates the right sizes.
 TEST_F(DataBufferTest, DataBufferFactoryAllocate) {
-  DataBuffer *db8_1 = db_factory_->Allocate<uint32_t>(8);
+  DataBuffer* db8_1 = db_factory_->Allocate<uint32_t>(8);
   EXPECT_EQ(db8_1->size<uint32_t>(), 8);
   EXPECT_EQ(db8_1->size<uint8_t>(), 32);
   EXPECT_EQ(db8_1->ref_count(), 1);
 
-  DataBuffer *db4_1 = db_factory_->Allocate<uint32_t>(4);
+  DataBuffer* db4_1 = db_factory_->Allocate<uint32_t>(4);
   EXPECT_EQ(db4_1->size<uint32_t>(), 4);
   EXPECT_EQ(db4_1->size<uint8_t>(), 16);
   EXPECT_EQ(db4_1->ref_count(), 1);
@@ -53,17 +54,17 @@
 
 // Test that DataBuffers are allocated and recycled.
 TEST_F(DataBufferTest, DataBufferFactoryAllocateRecycleAllocate) {
-  DataBuffer *db8_1 = db_factory_->Allocate<uint32_t>(8);
+  DataBuffer* db8_1 = db_factory_->Allocate<uint32_t>(8);
 
   db8_1->DecRef();
 
-  DataBuffer *db4_1 = db_factory_->Allocate<uint32_t>(4);
+  DataBuffer* db4_1 = db_factory_->Allocate<uint32_t>(4);
   EXPECT_NE(db8_1, db4_1);
 
   db4_1->DecRef();
 
-  DataBuffer *db8_2 = db_factory_->Allocate<uint32_t>(8);
-  DataBuffer *db4_2 = db_factory_->Allocate<uint32_t>(4);
+  DataBuffer* db8_2 = db_factory_->Allocate<uint32_t>(8);
+  DataBuffer* db4_2 = db_factory_->Allocate<uint32_t>(4);
 
   EXPECT_EQ(db8_1, db8_2);
   EXPECT_EQ(db4_1, db4_2);
@@ -79,13 +80,13 @@
   const uint32_t kValues[] = {0x01020304, 0xDEADBEEF, 0xA5A55A5A, 0xF0F00F0F};
   const int kSize = 4;
 
-  DataBuffer *db_source = db_factory_->Allocate<uint32_t>(kSize);
+  DataBuffer* db_source = db_factory_->Allocate<uint32_t>(kSize);
 
   for (int index = 0; index < kSize; index++) {
     db_source->Set<uint32_t>(index, kValues[index]);
   }
 
-  DataBuffer *db_dest = db_factory_->MakeCopyOf(db_source);
+  DataBuffer* db_dest = db_factory_->MakeCopyOf(db_source);
 
   EXPECT_NE(db_source, db_dest);
   EXPECT_EQ(db_source->size<uint32_t>(), db_dest->size<uint32_t>());
@@ -104,7 +105,7 @@
   const std::vector<uint32_t> kValueVec{0x01020304, 0xDEADBEEF, 0xA5A55A5A,
                                         0xF0F00F0F};
 
-  DataBuffer *db = db_factory_->Allocate<uint32_t>(kValueVec.size());
+  DataBuffer* db = db_factory_->Allocate<uint32_t>(kValueVec.size());
   db->Set<uint32_t>(kValueVec);
 
   for (size_t index = 0; index < kValueVec.size(); index++) {
@@ -136,9 +137,9 @@
     double y;
   };
 
-  DataBuffer *db = db_factory_->Allocate(sizeof(MyTest));
+  DataBuffer* db = db_factory_->Allocate(sizeof(MyTest));
   EXPECT_EQ(sizeof(MyTest), db->size<unsigned char>());
-  MyTest *my_test = reinterpret_cast<MyTest *>(db->raw_ptr());
+  MyTest* my_test = reinterpret_cast<MyTest*>(db->raw_ptr());
   my_test->y = 3.14;
   db->DecRef();
 }
diff --git a/mpact/sim/generic/test/decode_cache_test.cc b/mpact/sim/generic/test/decode_cache_test.cc
index 7c71ddd..20f40d1 100644
--- a/mpact/sim/generic/test/decode_cache_test.cc
+++ b/mpact/sim/generic/test/decode_cache_test.cc
@@ -31,13 +31,13 @@
  public:
   MockDecoder() : num_decoded_(0) {}
   ~MockDecoder() override {}
-  Instruction *DecodeInstruction(uint64_t address) override {
+  Instruction* DecodeInstruction(uint64_t address) override {
     num_decoded_++;
-    Instruction *inst = new Instruction(address, nullptr);
+    Instruction* inst = new Instruction(address, nullptr);
     return inst;
   }
   int GetNumOpcodes() const override { return 0; }
-  const char *GetOpcodeName(int index) const override { return ""; }
+  const char* GetOpcodeName(int index) const override { return ""; }
   void set_num_decoded(int val) { num_decoded_ = val; }
   int num_decoded() const { return num_decoded_; }
 
@@ -52,7 +52,7 @@
 
   ~DecodeCacheTest() override { delete decoder_; }
 
-  MockDecoder *decoder_;
+  MockDecoder* decoder_;
 };
 
 // Test creation and verify basic properties.
@@ -61,7 +61,7 @@
 
   props.num_entries = 1000;
   props.minimum_pc_increment = 4;
-  DecodeCache *dc = DecodeCache::Create(props, decoder_);
+  DecodeCache* dc = DecodeCache::Create(props, decoder_);
   EXPECT_EQ(dc->num_entries(), 1024);
   EXPECT_EQ(dc->address_mask(), 0xFFC);
   EXPECT_EQ(dc->address_shift(), 2);
@@ -83,9 +83,9 @@
   DecodeCacheProperties props;
   props.num_entries = 1000;
   props.minimum_pc_increment = 4;
-  DecodeCache *dc = DecodeCache::Create(props, decoder_);
+  DecodeCache* dc = DecodeCache::Create(props, decoder_);
 
-  Instruction *inst;
+  Instruction* inst;
   EXPECT_EQ(decoder_->num_decoded(), 0);
   // Not in cache, decoder will be called.
   inst = dc->GetDecodedInstruction(0x1000);
@@ -116,9 +116,9 @@
   DecodeCacheProperties props;
   props.num_entries = 1000;
   props.minimum_pc_increment = 4;
-  DecodeCache *dc = DecodeCache::Create(props, decoder_);
+  DecodeCache* dc = DecodeCache::Create(props, decoder_);
 
-  Instruction *inst;
+  Instruction* inst;
   inst = dc->GetDecodedInstruction(0x1000);
   inst = dc->GetDecodedInstruction(0x1004);
   inst = dc->GetDecodedInstruction(0x1008);
@@ -139,9 +139,9 @@
   DecodeCacheProperties props;
   props.num_entries = 1000;
   props.minimum_pc_increment = 4;
-  DecodeCache *dc = DecodeCache::Create(props, decoder_);
+  DecodeCache* dc = DecodeCache::Create(props, decoder_);
 
-  Instruction *inst;
+  Instruction* inst;
   inst = dc->GetDecodedInstruction(0x1000);
   inst = dc->GetDecodedInstruction(0x1004);
   inst = dc->GetDecodedInstruction(0x1008);
@@ -162,9 +162,9 @@
   DecodeCacheProperties props;
   props.num_entries = 1000;
   props.minimum_pc_increment = 4;
-  DecodeCache *dc = DecodeCache::Create(props, decoder_);
+  DecodeCache* dc = DecodeCache::Create(props, decoder_);
 
-  Instruction *inst;
+  Instruction* inst;
   inst = dc->GetDecodedInstruction(0x1000);
   inst = dc->GetDecodedInstruction(0x1004);
   inst = dc->GetDecodedInstruction(0x1008);
diff --git a/mpact/sim/generic/test/delay_line_test.cc b/mpact/sim/generic/test/delay_line_test.cc
index 960ba59..cf58445 100644
--- a/mpact/sim/generic/test/delay_line_test.cc
+++ b/mpact/sim/generic/test/delay_line_test.cc
@@ -14,7 +14,7 @@
 
 #include "mpact/sim/generic/delay_line.h"
 
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 
 namespace mpact {
@@ -28,11 +28,11 @@
   class TestRecord {
    public:
     void Apply() { *dest_ = value_; }
-    TestRecord(int value, int *dest) : value_(value), dest_(dest) {}
+    TestRecord(int value, int* dest) : value_(value), dest_(dest) {}
 
    private:
     int value_;
-    int *dest_;
+    int* dest_;
   };
 
   // Delay Line is 8 entries deep.
@@ -40,7 +40,7 @@
 
   ~DelayLineTest() override { delete delay_line_; }
 
-  DelayLine<TestRecord> *delay_line_;
+  DelayLine<TestRecord>* delay_line_;
 };
 
 // Test that the value changes after two calls to Advance.
diff --git a/mpact/sim/generic/test/devnull_operand_test.cc b/mpact/sim/generic/test/devnull_operand_test.cc
index 5cbed05..22dff8b 100644
--- a/mpact/sim/generic/test/devnull_operand_test.cc
+++ b/mpact/sim/generic/test/devnull_operand_test.cc
@@ -17,8 +17,8 @@
 #include <cstdint>
 #include <memory>
 
-#include "absl/memory/memory.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "absl/strings/string_view.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/arch_state.h"
 #include "mpact/sim/generic/data_buffer.h"
@@ -32,7 +32,7 @@
 
 class MockArchState : public ArchState {
  public:
-  MockArchState(absl::string_view id, SourceOperandInterface *pc_op)
+  MockArchState(absl::string_view id, SourceOperandInterface* pc_op)
       : ArchState(id, pc_op) {}
   explicit MockArchState(absl::string_view id) : MockArchState(id, nullptr) {}
 };
@@ -42,7 +42,7 @@
   DevNullOperandTest() { arch_state_ = new MockArchState("MockArchState"); }
   ~DevNullOperandTest() override { delete arch_state_; }
 
-  MockArchState *arch_state_;
+  MockArchState* arch_state_;
 };
 
 // Testing that the operand behaves like a normal destination, that the
diff --git a/mpact/sim/generic/test/fifo_operand_test.cc b/mpact/sim/generic/test/fifo_operand_test.cc
index 839560c..6f852bc 100644
--- a/mpact/sim/generic/test/fifo_operand_test.cc
+++ b/mpact/sim/generic/test/fifo_operand_test.cc
@@ -18,11 +18,10 @@
 
 #include "absl/strings/string_view.h"
 #include "absl/types/any.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/arch_state.h"
 #include "mpact/sim/generic/data_buffer.h"
-#include "mpact/sim/generic/delay_line.h"
 #include "mpact/sim/generic/fifo.h"
 #include "mpact/sim/generic/operand_interface.h"
 
@@ -42,7 +41,7 @@
 // protected.
 class MockArchState : public ArchState {
  public:
-  MockArchState(absl::string_view id, SourceOperandInterface *pc_op)
+  MockArchState(absl::string_view id, SourceOperandInterface* pc_op)
       : ArchState(id, pc_op) {}
   explicit MockArchState(absl::string_view id) : MockArchState(id, nullptr) {}
 };
@@ -63,16 +62,16 @@
     delete arch_state_;
   }
 
-  MockArchState *arch_state_;
-  ScalarFifo *sfifo_;
-  Vector8Fifo *vfifo_;
+  MockArchState* arch_state_;
+  ScalarFifo* sfifo_;
+  Vector8Fifo* vfifo_;
 };
 
 // Tests that the fifo source operands are initialized correctly.
 TEST_F(FifoOperandTest, SourceOperandInitialization) {
   auto s_src_op = std::make_unique<FifoSourceOperand<uint32_t>>(sfifo_);
-  EXPECT_EQ(std::any_cast<FifoBase *>(s_src_op->GetObject()),
-            static_cast<FifoBase *>(sfifo_));
+  EXPECT_EQ(std::any_cast<FifoBase*>(s_src_op->GetObject()),
+            static_cast<FifoBase*>(sfifo_));
   EXPECT_EQ(s_src_op->shape(), sfifo_->shape());
   EXPECT_EQ(s_src_op->AsString(), kScalarFifoName);
 
@@ -80,8 +79,8 @@
   EXPECT_EQ(s_src_op->AsString(), "Fifo");
 
   auto v_src_op = std::make_unique<FifoSourceOperand<uint32_t>>(vfifo_);
-  EXPECT_EQ(std::any_cast<FifoBase *>(v_src_op->GetObject()),
-            static_cast<FifoBase *>(vfifo_));
+  EXPECT_EQ(std::any_cast<FifoBase*>(v_src_op->GetObject()),
+            static_cast<FifoBase*>(vfifo_));
   EXPECT_EQ(v_src_op->shape(), vfifo_->shape());
   EXPECT_EQ(v_src_op->AsString(), kVectorFifoName);
 
@@ -95,8 +94,8 @@
   EXPECT_EQ(s_dst_op->latency(), 1);
   EXPECT_EQ(s_dst_op->shape(), sfifo_->shape());
   EXPECT_EQ(s_dst_op->CopyDataBuffer(), nullptr);
-  EXPECT_EQ(std::any_cast<FifoBase *>(s_dst_op->GetObject()),
-            static_cast<FifoBase *>(sfifo_));
+  EXPECT_EQ(std::any_cast<FifoBase*>(s_dst_op->GetObject()),
+            static_cast<FifoBase*>(sfifo_));
   EXPECT_EQ(s_dst_op->AsString(), kScalarFifoName);
 
   s_dst_op =
@@ -107,8 +106,8 @@
   EXPECT_EQ(v_dst_op->latency(), 4);
   EXPECT_EQ(v_dst_op->shape(), vfifo_->shape());
   EXPECT_EQ(v_dst_op->CopyDataBuffer(), nullptr);
-  EXPECT_EQ(std::any_cast<FifoBase *>(v_dst_op->GetObject()),
-            static_cast<FifoBase *>(vfifo_));
+  EXPECT_EQ(std::any_cast<FifoBase*>(v_dst_op->GetObject()),
+            static_cast<FifoBase*>(vfifo_));
   EXPECT_EQ(v_dst_op->AsString(), kVectorFifoName);
 
   v_dst_op =
@@ -123,7 +122,7 @@
   auto src_op = sfifo_->CreateSourceOperand();
 
   // Get DataBuffer from destination operand and initialize the value.
-  DataBuffer *db = dst_op->AllocateDataBuffer();
+  DataBuffer* db = dst_op->AllocateDataBuffer();
   db->Set<uint32_t>(0, 0xDEADBEEF);
 
   // Submit data buffer and advance the delay line by the 1 cycle latency.
@@ -142,7 +141,7 @@
   EXPECT_EQ(src_op->AsUint64(0), 0xDEADBEEF);
 
   // Get a new data buffer and initialize it to a new value.
-  DataBuffer *db2 = dst_op->AllocateDataBuffer();
+  DataBuffer* db2 = dst_op->AllocateDataBuffer();
   db2->Set<uint32_t>(0, 0xA5A55A5A);
 
   // Submit the data buffer and advance the delay line 1 cycle.
@@ -153,11 +152,11 @@
   EXPECT_EQ(src_op->AsUint32(0), 0xDEADBEEF);
 
   // Pop the fifo and verify the new value is there.
-  std::any_cast<FifoBase *>(src_op->GetObject())->Pop();
+  std::any_cast<FifoBase*>(src_op->GetObject())->Pop();
   EXPECT_EQ(src_op->AsUint32(0), 0xA5A55A5A);
 
   // Pop the fifo. It is now empty, so attempting to get a value will return 0.
-  std::any_cast<FifoBase *>(src_op->GetObject())->Pop();
+  std::any_cast<FifoBase*>(src_op->GetObject())->Pop();
   EXPECT_EQ(src_op->AsUint32(0), 0);
   EXPECT_EQ(src_op->AsInt32(0), 0);
 
@@ -172,7 +171,7 @@
   auto src_op = vfifo_->CreateSourceOperand();
 
   // Get DataBuffer from destination operand and initialize the value.
-  DataBuffer *db = dst_op->AllocateDataBuffer();
+  DataBuffer* db = dst_op->AllocateDataBuffer();
   for (int index = 0; index < vfifo_->shape()[0]; index++) {
     db->Set<uint32_t>(index, 0xDEAD0000 | index);
   }
@@ -188,7 +187,7 @@
   }
 
   // Get another DataBuffer from destination operand and initialize to zeros.
-  DataBuffer *db2 = dst_op->AllocateDataBuffer();
+  DataBuffer* db2 = dst_op->AllocateDataBuffer();
   for (int index = 0; index < vfifo_->shape()[0]; index++) {
     db2->Set<uint32_t>(index, 0);
   }
@@ -204,7 +203,7 @@
   }
 
   // Pop the fifo and verify that the value has been updated.
-  std::any_cast<FifoBase *>(src_op->GetObject())->Pop();
+  std::any_cast<FifoBase*>(src_op->GetObject())->Pop();
   for (int index = 0; index < vfifo_->shape()[0]; index++) {
     EXPECT_EQ(src_op->AsUint32(index), 0);
   }
diff --git a/mpact/sim/generic/test/fifo_test.cc b/mpact/sim/generic/test/fifo_test.cc
index 5deed7b..57b7062 100644
--- a/mpact/sim/generic/test/fifo_test.cc
+++ b/mpact/sim/generic/test/fifo_test.cc
@@ -17,15 +17,12 @@
 #include <cstdint>
 #include <memory>
 
-#include "absl/memory/memory.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
-#include "mpact/sim/generic/config.h"
 #include "mpact/sim/generic/data_buffer.h"
 #include "mpact/sim/generic/program_error.h"
 #include "mpact/sim/proto/component_data.pb.h"
 #include "src/google/protobuf/text_format.h"
-#include "src/google/protobuf/util/message_differencer.h"
 
 namespace mpact {
 namespace sim {
@@ -107,7 +104,7 @@
   EXPECT_EQ(scalar_fifo->Front(), nullptr);
 
   // Allocate a data buffer of the right byte size and bind it to the fifo.
-  DataBuffer *db = db_factory_->Allocate(scalar_fifo->size());
+  DataBuffer* db = db_factory_->Allocate(scalar_fifo->size());
   scalar_fifo->SetDataBuffer(db);
   EXPECT_EQ(scalar_fifo->Available(), 1);
   EXPECT_FALSE(scalar_fifo->IsFull());
@@ -126,7 +123,7 @@
   EXPECT_EQ(vector_fifo->Front(), nullptr);
 
   // Allocate a data buffer of the right byte size and bind it to the fifo.
-  DataBuffer *db = db_factory_->Allocate(vector_fifo->size());
+  DataBuffer* db = db_factory_->Allocate(vector_fifo->size());
   vector_fifo->SetDataBuffer(db);
   EXPECT_EQ(vector_fifo->Available(), 1);
   EXPECT_FALSE(vector_fifo->IsFull());
@@ -146,7 +143,7 @@
   EXPECT_EQ(matrix_fifo->Front(), nullptr);
 
   // Allocate a data buffer of the right byte size and bind it to the fifo.
-  DataBuffer *db = db_factory_->Allocate(matrix_fifo->size());
+  DataBuffer* db = db_factory_->Allocate(matrix_fifo->size());
   matrix_fifo->SetDataBuffer(db);
   EXPECT_EQ(matrix_fifo->Available(), 1);
   EXPECT_FALSE(matrix_fifo->IsFull());
@@ -162,7 +159,7 @@
 TEST_F(FifoTest, EmptyFullEmpty) {
   auto fifo = std::make_unique<ScalarFifo>(nullptr, "S0", kFifoDepth);
 
-  DataBuffer *db[kFifoDepth + 1];
+  DataBuffer* db[kFifoDepth + 1];
   for (int db_num = 0; db_num < kFifoDepth + 1; db_num++) {
     db[db_num] = db_factory_->Allocate(fifo->size());
   }
@@ -212,7 +209,7 @@
   EXPECT_TRUE(fifo->IsFull());
   EXPECT_FALSE(fifo->IsOverSubscribed());
 
-  DataBuffer *db[kFifoDepth];
+  DataBuffer* db[kFifoDepth];
   for (int db_num = 0; db_num < kFifoDepth; db_num++) {
     db[db_num] = db_factory_->Allocate(fifo->size());
     fifo->Push(db[db_num]);
@@ -267,7 +264,7 @@
   fifo->SetOverflowProgramError(&overflow);
   EXPECT_FALSE(controller_->HasError());
 
-  DataBuffer *db[kFifoDepth + 1];
+  DataBuffer* db[kFifoDepth + 1];
   for (int db_num = 0; db_num < kFifoDepth + 1; db_num++) {
     db[db_num] = db_factory_->Allocate(fifo->size());
     fifo->Push(db[db_num]);
diff --git a/mpact/sim/generic/test/fifo_with_notify_test.cc b/mpact/sim/generic/test/fifo_with_notify_test.cc
index 09953e2..98d9f58 100644
--- a/mpact/sim/generic/test/fifo_with_notify_test.cc
+++ b/mpact/sim/generic/test/fifo_with_notify_test.cc
@@ -14,13 +14,12 @@
 
 #include "mpact/sim/generic/fifo_with_notify.h"
 
+#include <cstdint>
 #include <memory>
 
-#include "absl/memory/memory.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/data_buffer.h"
-#include "mpact/sim/generic/program_error.h"
 
 namespace {
 
@@ -48,7 +47,7 @@
 
 TEST_F(FifoWithNotifyTest, NoCallbacks) {
   EXPECT_TRUE(fifo_->IsEmpty());
-  auto *db = db_factory_->Allocate(sizeof(uint32_t));
+  auto* db = db_factory_->Allocate(sizeof(uint32_t));
   fifo_->Push(db);
   EXPECT_TRUE(!fifo_->IsEmpty());
   fifo_->Pop();
@@ -59,10 +58,10 @@
   int on_empty_count = 0;
   int on_not_empty_count = 0;
   fifo_->SetOnEmpty(
-      [&on_empty_count](FifoWithNotifyBase *) { on_empty_count++; });
+      [&on_empty_count](FifoWithNotifyBase*) { on_empty_count++; });
   fifo_->SetOnNotEmpty(
-      [&on_not_empty_count](FifoWithNotifyBase *) { on_not_empty_count++; });
-  auto *db = db_factory_->Allocate(sizeof(uint32_t));
+      [&on_not_empty_count](FifoWithNotifyBase*) { on_not_empty_count++; });
+  auto* db = db_factory_->Allocate(sizeof(uint32_t));
   EXPECT_EQ(on_empty_count, 0);
   EXPECT_EQ(on_not_empty_count, 0);
   (void)fifo_->Push(db);
diff --git a/mpact/sim/generic/test/immediate_operand_test.cc b/mpact/sim/generic/test/immediate_operand_test.cc
index 9c69eef..441f3af 100644
--- a/mpact/sim/generic/test/immediate_operand_test.cc
+++ b/mpact/sim/generic/test/immediate_operand_test.cc
@@ -14,13 +14,13 @@
 
 #include "mpact/sim/generic/immediate_operand.h"
 
+#include <cstddef>
 #include <cstdint>
 #include <limits>
 #include <memory>
 #include <vector>
 
-#include "absl/memory/memory.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 
 namespace mpact {
diff --git a/mpact/sim/generic/test/instruction_test.cc b/mpact/sim/generic/test/instruction_test.cc
index 3c29e09..d1d3b63 100644
--- a/mpact/sim/generic/test/instruction_test.cc
+++ b/mpact/sim/generic/test/instruction_test.cc
@@ -16,6 +16,7 @@
 
 #include <memory>
 
+#include "absl/types/span.h"
 #include "googlemock/include/gmock/gmock.h"
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/ref_count.h"
@@ -27,7 +28,7 @@
 
 struct InstructionContext : public ReferenceCount {
  public:
-  int *value;
+  int* value;
 };
 
 // Tests values of the instruction properties.
@@ -54,10 +55,10 @@
   auto my_context = std::make_unique<InstructionContext>();
   my_context->value = &context_value;
 
-  inst->set_semantic_function([&](Instruction *inst) {
-    EXPECT_EQ(inst->context(), static_cast<ReferenceCount *>(my_context.get()));
+  inst->set_semantic_function([&](Instruction* inst) {
+    EXPECT_EQ(inst->context(), static_cast<ReferenceCount*>(my_context.get()));
     my_value = 1;
-    auto context = static_cast<InstructionContext *>(inst->context());
+    auto context = static_cast<InstructionContext*>(inst->context());
     ++(*context->value);
   });
 
@@ -70,8 +71,8 @@
 TEST(InstructionTest, ChildBundle) {
   auto inst = std::make_unique<Instruction>(0x1000, nullptr);
 
-  Instruction *child0 = new Instruction(nullptr);
-  Instruction *child1 = new Instruction(nullptr);
+  Instruction* child0 = new Instruction(nullptr);
+  Instruction* child1 = new Instruction(nullptr);
 
   inst->AppendChild(nullptr);
   EXPECT_EQ(inst->child(), nullptr);
@@ -93,8 +94,8 @@
 TEST(InstructionTest, InstructionList) {
   auto inst = std::make_unique<Instruction>(0x1000, nullptr);
 
-  Instruction *next0 = new Instruction(nullptr);
-  Instruction *next1 = new Instruction(nullptr);
+  Instruction* next0 = new Instruction(nullptr);
+  Instruction* next1 = new Instruction(nullptr);
 
   inst->Append(nullptr);
   EXPECT_EQ(inst->next(), nullptr);
diff --git a/mpact/sim/generic/test/program_error_test.cc b/mpact/sim/generic/test/program_error_test.cc
index dc32e61..c93af64 100644
--- a/mpact/sim/generic/test/program_error_test.cc
+++ b/mpact/sim/generic/test/program_error_test.cc
@@ -36,7 +36,7 @@
 
   ~ProgramErrorTest() override { delete controller_; }
 
-  ProgramErrorController *controller_;
+  ProgramErrorController* controller_;
 };
 
 TEST_F(ProgramErrorTest, ControllerInstantiation) {
diff --git a/mpact/sim/generic/test/ref_count_test.cc b/mpact/sim/generic/test/ref_count_test.cc
index 3622d6a..03dff6a 100644
--- a/mpact/sim/generic/test/ref_count_test.cc
+++ b/mpact/sim/generic/test/ref_count_test.cc
@@ -14,7 +14,7 @@
 
 #include "mpact/sim/generic/ref_count.h"
 
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 
 namespace mpact {
@@ -25,7 +25,7 @@
 // Test class that counts calls to the destructor and OnRefCountIsZero.
 class TestRefCount : public ReferenceCount {
  public:
-  TestRefCount(int *destructor_call_count, int *refcount_zero_call_count)
+  TestRefCount(int* destructor_call_count, int* refcount_zero_call_count)
       : destructor_call_count_(destructor_call_count),
         refcount_zero_call_count_(refcount_zero_call_count) {}
 
@@ -45,20 +45,20 @@
   }
 
  private:
-  int *destructor_call_count_;
-  int *refcount_zero_call_count_;
+  int* destructor_call_count_;
+  int* refcount_zero_call_count_;
 };
 
 // Call constructor and ensure that the refcount is initialized to 1.
 TEST(RefCount, Create) {
-  ReferenceCount *ref_count = new ReferenceCount();
+  ReferenceCount* ref_count = new ReferenceCount();
   EXPECT_EQ(ref_count->ref_count(), 1);
   ref_count->DecRef();
 }
 
 // Test that ref count increases when Inc is called.
 TEST(RefCount, IncRef) {
-  ReferenceCount *ref_count = new ReferenceCount();
+  ReferenceCount* ref_count = new ReferenceCount();
   EXPECT_EQ(ref_count->ref_count(), 1);
   ref_count->IncRef();
   EXPECT_EQ(ref_count->ref_count(), 2);
@@ -73,7 +73,7 @@
 TEST(RefCount, OnRefCountIsZero) {
   int destructor_call_count = 0;
   int refcount_zero_call_count = 0;
-  TestRefCount *test_ref_count =
+  TestRefCount* test_ref_count =
       new TestRefCount(&destructor_call_count, &refcount_zero_call_count);
 
   EXPECT_EQ(test_ref_count->ref_count(), 1);
diff --git a/mpact/sim/generic/test/register_operand_test.cc b/mpact/sim/generic/test/register_operand_test.cc
index 8dcaac2..bd8b91c 100644
--- a/mpact/sim/generic/test/register_operand_test.cc
+++ b/mpact/sim/generic/test/register_operand_test.cc
@@ -17,11 +17,10 @@
 
 #include "absl/strings/string_view.h"
 #include "absl/types/any.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/arch_state.h"
 #include "mpact/sim/generic/data_buffer.h"
-#include "mpact/sim/generic/delay_line.h"
 #include "mpact/sim/generic/operand_interface.h"
 #include "mpact/sim/generic/register.h"
 #include "mpact/sim/generic/simple_resource.h"
@@ -42,7 +41,7 @@
 // protected.
 class MockArchState : public ArchState {
  public:
-  MockArchState(absl::string_view id, SourceOperandInterface *pc_op)
+  MockArchState(absl::string_view id, SourceOperandInterface* pc_op)
       : ArchState(id, pc_op) {}
   explicit MockArchState(absl::string_view id) : MockArchState(id, nullptr) {}
 };
@@ -70,30 +69,30 @@
     delete arch_state_;
   }
 
-  MockArchState *arch_state_;
-  ScalarRegister *sreg_;
-  Vector8Register *vreg_;
-  ScalarReservedRegister *rreg_ = nullptr;
-  SimpleResourcePool *pool_;
+  MockArchState* arch_state_;
+  ScalarRegister* sreg_;
+  Vector8Register* vreg_;
+  ScalarReservedRegister* rreg_ = nullptr;
+  SimpleResourcePool* pool_;
 };
 
 // Tests that the register source operands are initialized correctly.
 TEST_F(RegisterOperandTest, SourceOperandInitialization) {
   auto s_src_op = sreg_->CreateSourceOperand();
-  EXPECT_EQ(std::any_cast<RegisterBase *>(s_src_op->GetObject()),
-            static_cast<RegisterBase *>(sreg_));
+  EXPECT_EQ(std::any_cast<RegisterBase*>(s_src_op->GetObject()),
+            static_cast<RegisterBase*>(sreg_));
   EXPECT_EQ(s_src_op->shape(), sreg_->shape());
   delete s_src_op;
 
   auto v_src_op = vreg_->CreateSourceOperand();
-  EXPECT_EQ(std::any_cast<RegisterBase *>(v_src_op->GetObject()),
-            static_cast<RegisterBase *>(vreg_));
+  EXPECT_EQ(std::any_cast<RegisterBase*>(v_src_op->GetObject()),
+            static_cast<RegisterBase*>(vreg_));
   EXPECT_EQ(v_src_op->shape(), vreg_->shape());
   delete v_src_op;
 
   auto r_src_op = rreg_->CreateSourceOperand();
-  EXPECT_EQ(std::any_cast<RegisterBase *>(r_src_op->GetObject()),
-            static_cast<RegisterBase *>(rreg_));
+  EXPECT_EQ(std::any_cast<RegisterBase*>(r_src_op->GetObject()),
+            static_cast<RegisterBase*>(rreg_));
   EXPECT_EQ(r_src_op->shape(), rreg_->shape());
   delete r_src_op;
 }
@@ -103,22 +102,22 @@
   auto s_dst_op = sreg_->CreateDestinationOperand(1);
   EXPECT_EQ(s_dst_op->latency(), 1);
   EXPECT_EQ(s_dst_op->shape(), sreg_->shape());
-  EXPECT_EQ(std::any_cast<RegisterBase *>(s_dst_op->GetObject()),
-            static_cast<RegisterBase *>(sreg_));
+  EXPECT_EQ(std::any_cast<RegisterBase*>(s_dst_op->GetObject()),
+            static_cast<RegisterBase*>(sreg_));
   delete s_dst_op;
 
   auto v_dst_op = vreg_->CreateDestinationOperand(4);
   EXPECT_EQ(v_dst_op->latency(), 4);
   EXPECT_EQ(v_dst_op->shape(), vreg_->shape());
-  EXPECT_EQ(std::any_cast<RegisterBase *>(v_dst_op->GetObject()),
-            static_cast<RegisterBase *>(vreg_));
+  EXPECT_EQ(std::any_cast<RegisterBase*>(v_dst_op->GetObject()),
+            static_cast<RegisterBase*>(vreg_));
   delete v_dst_op;
 
   auto r_dst_op = rreg_->CreateDestinationOperand(3);
   EXPECT_EQ(r_dst_op->latency(), 3);
   EXPECT_EQ(r_dst_op->shape(), rreg_->shape());
-  EXPECT_EQ(std::any_cast<RegisterBase *>(r_dst_op->GetObject()),
-            static_cast<RegisterBase *>(rreg_));
+  EXPECT_EQ(std::any_cast<RegisterBase*>(r_dst_op->GetObject()),
+            static_cast<RegisterBase*>(rreg_));
   delete r_dst_op;
 }
 
@@ -129,7 +128,7 @@
   auto src_op = sreg_->CreateSourceOperand();
 
   // Get DataBuffer from destination operand and initialize the value.
-  DataBuffer *db = dst_op->AllocateDataBuffer();
+  DataBuffer* db = dst_op->AllocateDataBuffer();
   db->Set<uint32_t>(0, 0xDEADBEEF);
   // Submit data buffer and advance the delay line by the 1 cycle latency.
   db->Submit();
@@ -140,7 +139,7 @@
 
   // Get a new data buffer with copy of the current value and verify value is
   // correct.
-  DataBuffer *db2 = dst_op->CopyDataBuffer();
+  DataBuffer* db2 = dst_op->CopyDataBuffer();
   EXPECT_EQ(db2->Get<uint32_t>(0), 0xDEADBEEF);
 
   // Change value, submit the data buffer and advance the delay line 1 cycle.
@@ -162,7 +161,7 @@
   auto src_op = vreg_->CreateSourceOperand();
 
   // Get DataBuffer from destination operand and initialize the value.
-  DataBuffer *db = dst_op->AllocateDataBuffer();
+  DataBuffer* db = dst_op->AllocateDataBuffer();
   for (int index = 0; index < vreg_->shape()[0]; index++) {
     db->Set<uint32_t>(index, 0xDEAD0000 | index);
   }
@@ -178,7 +177,7 @@
   }
 
   // Get DataBuffer from destination operand with copy of the current value.
-  DataBuffer *db2 = dst_op->CopyDataBuffer();
+  DataBuffer* db2 = dst_op->CopyDataBuffer();
 
   // Verify that the value is the same as before.
   for (int index = 0; index < vreg_->shape()[0]; index++) {
@@ -210,7 +209,7 @@
   rreg_->resource()->Acquire();
 
   // Get DataBuffer from destination operand and initialize the value.
-  DataBuffer *db = dst_op->AllocateDataBuffer();
+  DataBuffer* db = dst_op->AllocateDataBuffer();
 
   db->Set<uint32_t>(0, 0xDEAD0000);
 
@@ -225,7 +224,7 @@
   EXPECT_EQ(src_op->AsUint32(0), 0xDEAD0000);
 
   // Get DataBuffer from destination operand with copy of the current value.
-  DataBuffer *db2 = dst_op->CopyDataBuffer();
+  DataBuffer* db2 = dst_op->CopyDataBuffer();
 
   EXPECT_TRUE(rreg_->resource()->IsFree());
   rreg_->resource()->Acquire();
diff --git a/mpact/sim/generic/test/register_test.cc b/mpact/sim/generic/test/register_test.cc
index 8badee8..4b00d2b 100644
--- a/mpact/sim/generic/test/register_test.cc
+++ b/mpact/sim/generic/test/register_test.cc
@@ -17,9 +17,9 @@
 #include <cstdint>
 #include <memory>
 
-#include "absl/memory/memory.h"
-#include "googlemock/include/gmock/gmock.h"
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
+#include "mpact/sim/generic/data_buffer.h"
 #include "mpact/sim/generic/simple_resource.h"
 
 namespace mpact {
@@ -54,8 +54,8 @@
     delete pool_;
   }
 
-  DataBufferFactory *db_factory_;
-  SimpleResourcePool *pool_;
+  DataBufferFactory* db_factory_;
+  SimpleResourcePool* pool_;
 };
 
 // Create scalar register and verify attributes.
@@ -91,7 +91,7 @@
       nullptr, "S0", pool_->GetResource("S0"));
   pool_->GetResource("S0")->Acquire();
   EXPECT_FALSE(pool_->GetResource("S0")->IsFree());
-  auto *db = db_factory_->Allocate(scalar_reserved_reg->size());
+  auto* db = db_factory_->Allocate(scalar_reserved_reg->size());
   scalar_reserved_reg->SetDataBuffer(db);
   EXPECT_TRUE(pool_->GetResource("S0")->IsFree());
   db->DecRef();
@@ -104,7 +104,7 @@
   EXPECT_EQ(scalar_reg->data_buffer(), nullptr);
 
   // Allocate a data buffer of the right byte size and bind it to the register.
-  DataBuffer *db = db_factory_->Allocate(scalar_reg->size());
+  DataBuffer* db = db_factory_->Allocate(scalar_reg->size());
   scalar_reg->SetDataBuffer(db);
 
   // Verify reference count is 2, then DecRef.
@@ -120,7 +120,7 @@
   EXPECT_EQ(vector_reg->data_buffer(), nullptr);
 
   // Allocate a data buffer of the right byte size and bind it to the register.
-  DataBuffer *db = db_factory_->Allocate(vector_reg->size());
+  DataBuffer* db = db_factory_->Allocate(vector_reg->size());
   vector_reg->SetDataBuffer(db);
 
   // Verify reference count is 2, then DecRef.
@@ -136,7 +136,7 @@
   EXPECT_EQ(matrix_reg->data_buffer(), nullptr);
 
   // Allocate a data buffer of the right byte size and bind it to the register.
-  DataBuffer *db = db_factory_->Allocate(matrix_reg->size());
+  DataBuffer* db = db_factory_->Allocate(matrix_reg->size());
   matrix_reg->SetDataBuffer(db);
 
   // Verify reference count is 2, then DecRef.
diff --git a/mpact/sim/generic/test/simple_resource_test.cc b/mpact/sim/generic/test/simple_resource_test.cc
index b9c7578..51b929d 100644
--- a/mpact/sim/generic/test/simple_resource_test.cc
+++ b/mpact/sim/generic/test/simple_resource_test.cc
@@ -33,7 +33,7 @@
 static constexpr char kTestResource0[] = "Resource0";
 static constexpr char kTestResource1[] = "Resource1";
 static constexpr char kTestResource2[] = "Resource2";
-static constexpr char const *kTestResources[] = {kTestResource0, kTestResource1,
+static constexpr char const* kTestResources[] = {kTestResource0, kTestResource1,
                                                  kTestResource2};
 
 class SimpleResourceTest : public testing::Test {
@@ -53,9 +53,9 @@
 }
 
 TEST_F(SimpleResourceTest, Resources) {
-  SimpleResource *resources[kNumResources];
+  SimpleResource* resources[kNumResources];
   for (int num = 0; num < kNumResources; num++) {
-    const char *name = kTestResources[num];
+    const char* name = kTestResources[num];
     // Creat resource.
     EXPECT_TRUE(pool_->AddResource(name).ok());
     resources[num] = pool_->GetResource(name);
@@ -83,16 +83,16 @@
 }
 
 TEST_F(SimpleResourceTest, ResourceSets) {
-  SimpleResource *resources[kNumResources];
+  SimpleResource* resources[kNumResources];
   for (int num = 0; num < kNumResources; num++) {
-    const char *name = kTestResources[num];
+    const char* name = kTestResources[num];
     // Creat resource.
     EXPECT_TRUE(pool_->AddResource(name).ok());
     resources[num] = pool_->GetResource(name);
   }
 
   // Create a resource set and add resource 0 and 1 to it.
-  SimpleResourceSet *resource_set = pool_->CreateResourceSet();
+  SimpleResourceSet* resource_set = pool_->CreateResourceSet();
   EXPECT_TRUE(resource_set->AddResource(kTestResource0).ok());
   EXPECT_TRUE(resource_set->AddResource(resources[1]).ok());
 
diff --git a/mpact/sim/generic/test/state_item_base_test.cc b/mpact/sim/generic/test/state_item_base_test.cc
index 2927161..07a7fc2 100644
--- a/mpact/sim/generic/test/state_item_base_test.cc
+++ b/mpact/sim/generic/test/state_item_base_test.cc
@@ -33,8 +33,8 @@
 
 class TestStateItemBase : public StateItemBase {
  public:
-  void SetDataBuffer(DataBuffer *db) override {}
-  TestStateItemBase(ArchState *state, absl::string_view nm,
+  void SetDataBuffer(DataBuffer* db) override {}
+  TestStateItemBase(ArchState* state, absl::string_view nm,
                     const std::vector<int> sz, int unit_size)
       : StateItemBase(state, nm, sz, unit_size) {}
   ~TestStateItemBase() override {}
diff --git a/mpact/sim/generic/test/status_register_test.cc b/mpact/sim/generic/test/status_register_test.cc
index 6e53b82..34643db 100644
--- a/mpact/sim/generic/test/status_register_test.cc
+++ b/mpact/sim/generic/test/status_register_test.cc
@@ -55,14 +55,14 @@
     delete src_op_64_;
   }
 
-  StatusRegister<uint8_t> *status_8_;
-  StatusRegister<uint16_t> *status_16_;
-  StatusRegister<uint32_t> *status_32_;
-  StatusRegister<uint64_t> *status_64_;
-  StatusRegisterSourceOperand<uint8_t> *src_op_8_;
-  StatusRegisterSourceOperand<uint16_t> *src_op_16_;
-  StatusRegisterSourceOperand<uint32_t> *src_op_32_;
-  StatusRegisterSourceOperand<uint64_t> *src_op_64_;
+  StatusRegister<uint8_t>* status_8_;
+  StatusRegister<uint16_t>* status_16_;
+  StatusRegister<uint32_t>* status_32_;
+  StatusRegister<uint64_t>* status_64_;
+  StatusRegisterSourceOperand<uint8_t>* src_op_8_;
+  StatusRegisterSourceOperand<uint16_t>* src_op_16_;
+  StatusRegisterSourceOperand<uint32_t>* src_op_32_;
+  StatusRegisterSourceOperand<uint64_t>* src_op_64_;
 };
 
 // Test that initial values are all 0.
diff --git a/mpact/sim/generic/test/token_fifo_test.cc b/mpact/sim/generic/test/token_fifo_test.cc
index c925082..752983d 100644
--- a/mpact/sim/generic/test/token_fifo_test.cc
+++ b/mpact/sim/generic/test/token_fifo_test.cc
@@ -14,10 +14,10 @@
 
 #include "mpact/sim/generic/token_fifo.h"
 
+#include <algorithm>
 #include <cstdint>
 #include <memory>
 
-#include "absl/memory/memory.h"
 #include "googlemock/include/gmock/gmock.h"
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/data_buffer.h"
@@ -73,7 +73,7 @@
   EXPECT_EQ(scalar_fifo->Front(), nullptr);
 
   // Allocate a data buffer of the right byte size and bind it to the fifo.
-  DataBuffer *db = db_factory_->Allocate(scalar_fifo->size());
+  DataBuffer* db = db_factory_->Allocate(scalar_fifo->size());
   scalar_fifo->SetDataBuffer(db);
   EXPECT_EQ(scalar_fifo->Available(), 1);
   EXPECT_FALSE(scalar_fifo->IsFull());
@@ -90,7 +90,7 @@
   auto fifo = std::make_unique<ScalarTokenFifo>(nullptr, "S0", kFifoDepth,
                                                 &token_store_);
 
-  DataBuffer *db[kNumTokens + 1];
+  DataBuffer* db[kNumTokens + 1];
   for (int db_num = 0; db_num < kNumTokens + 1; db_num++) {
     db[db_num] = db_factory_->Allocate(fifo->size());
   }
@@ -142,7 +142,7 @@
   EXPECT_TRUE(fifo->IsFull());
   EXPECT_FALSE(fifo->IsOverSubscribed());
 
-  DataBuffer *db[kNumTokens];
+  DataBuffer* db[kNumTokens];
   for (int db_num = 0; db_num < kNumTokens; db_num++) {
     db[db_num] = db_factory_->Allocate(fifo->size());
     fifo->Push(db[db_num]);
@@ -200,7 +200,7 @@
   fifo->SetOverflowProgramError(&overflow);
   EXPECT_FALSE(controller_->HasError());
 
-  DataBuffer *db[kNumTokens + 1];
+  DataBuffer* db[kNumTokens + 1];
   for (int db_num = 0; db_num < kNumTokens + 1; db_num++) {
     db[db_num] = db_factory_->Allocate(fifo->size());
     fifo->Push(db[db_num]);
diff --git a/mpact/sim/generic/token_fifo.cc b/mpact/sim/generic/token_fifo.cc
index b2452f6..978d62d 100644
--- a/mpact/sim/generic/token_fifo.cc
+++ b/mpact/sim/generic/token_fifo.cc
@@ -16,6 +16,12 @@
 
 #include <vector>
 
+#include "absl/status/status.h"
+#include "absl/strings/str_cat.h"
+#include "absl/strings/string_view.h"
+#include "mpact/sim/generic/arch_state.h"
+#include "mpact/sim/generic/data_buffer.h"
+
 namespace mpact {
 namespace sim {
 namespace generic {
@@ -38,9 +44,9 @@
 }
 
 // Token fifo base method definitions.
-TokenFifoBase::TokenFifoBase(ArchState *arch_state, absl::string_view name,
-                             const std::vector<int> &shape, int element_size,
-                             unsigned capacity, FifoTokenStore *tokens)
+TokenFifoBase::TokenFifoBase(ArchState* arch_state, absl::string_view name,
+                             const std::vector<int>& shape, int element_size,
+                             unsigned capacity, FifoTokenStore* tokens)
     : FifoBase(arch_state, name, shape, element_size, capacity),
       token_store_(tokens) {}
 
@@ -54,7 +60,7 @@
   return Reserved() > token_store_->available();
 }
 
-bool TokenFifoBase::Push(DataBuffer *db) {
+bool TokenFifoBase::Push(DataBuffer* db) {
   if (token_store_->available() == 0) {
     if (nullptr != overflow_program_error()) {
       overflow_program_error()->Raise("Overflow in fifo " + name());
diff --git a/mpact/sim/generic/token_fifo.h b/mpact/sim/generic/token_fifo.h
index f1aeaad..b583ca6 100644
--- a/mpact/sim/generic/token_fifo.h
+++ b/mpact/sim/generic/token_fifo.h
@@ -22,7 +22,6 @@
 #include "mpact/sim/generic/arch_state.h"
 #include "mpact/sim/generic/data_buffer.h"
 #include "mpact/sim/generic/fifo.h"
-#include "mpact/sim/generic/program_error.h"
 #include "mpact/sim/generic/state_item.h"
 #include "mpact/sim/generic/state_item_base.h"
 
@@ -55,20 +54,20 @@
 
 class TokenFifoBase : public FifoBase {
  protected:
-  TokenFifoBase(ArchState *arch_state, absl::string_view name,
-                const std::vector<int> &shape, int element_size,
-                unsigned capacity, FifoTokenStore *tokens);
+  TokenFifoBase(ArchState* arch_state, absl::string_view name,
+                const std::vector<int>& shape, int element_size,
+                unsigned capacity, FifoTokenStore* tokens);
   TokenFifoBase() = delete;
-  TokenFifoBase(const TokenFifoBase &) = delete;
+  TokenFifoBase(const TokenFifoBase&) = delete;
 
  public:
   bool IsOverSubscribed() const override;
   bool IsFull() const override;
-  bool Push(DataBuffer *db) override;
+  bool Push(DataBuffer* db) override;
   void Pop() override;
 
  private:
-  FifoTokenStore *token_store_;
+  FifoTokenStore* token_store_;
 };
 
 template <typename ElementType>
diff --git a/mpact/sim/generic/type_helpers.h b/mpact/sim/generic/type_helpers.h
index 4816ed1..bd5ec36 100644
--- a/mpact/sim/generic/type_helpers.h
+++ b/mpact/sim/generic/type_helpers.h
@@ -151,23 +151,23 @@
   static constexpr UIntType kPosInf = kExpMask;
   static constexpr UIntType kNegInf = kExpMask | (1ULL << (kBitSize - 1));
   static inline bool IsInf(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return (uint_val & kInfMask) == kPosInf;
   }
   static inline bool IsNaN(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return ((uint_val & kExpMask) == kExpMask) && ((uint_val & kSigMask) != 0);
   }
   static inline bool IsSNaN(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return IsNaN(value) && (((1 << (kSigSize - 1)) & uint_val) == 0);
   }
   static inline bool IsQNaN(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return IsNaN(value) && (((1 << (kSigSize - 1)) & uint_val) != 0);
   }
   static inline bool SignBit(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return 1 == (uint_val >> (kBitSize - 1));
   }
 };
@@ -189,23 +189,23 @@
   static constexpr UIntType kPosInf = kExpMask;
   static constexpr UIntType kNegInf = kExpMask | (1ULL << (kBitSize - 1));
   static inline bool IsInf(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return (uint_val & kInfMask) == kPosInf;
   }
   static inline bool IsNaN(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return ((uint_val & kExpMask) == kExpMask) && ((uint_val & kSigMask) != 0);
   }
   static inline bool IsSNaN(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return IsNaN(value) && (((1 << (kSigSize - 1)) & uint_val) == 0);
   }
   static inline bool IsQNaN(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return IsNaN(value) && (((1 << (kSigSize - 1)) & uint_val) != 0);
   }
   static inline bool SignBit(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return 1 == (uint_val >> (kBitSize - 1));
   }
 };
@@ -227,23 +227,23 @@
   static constexpr UIntType kPosInf = kExpMask;
   static constexpr UIntType kNegInf = kExpMask | (1ULL << (kBitSize - 1));
   static inline bool IsInf(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return (uint_val & kInfMask) == kPosInf;
   }
   static inline bool IsNaN(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return ((uint_val & kExpMask) == kExpMask) && ((uint_val & kSigMask) != 0);
   }
   static inline bool IsSNaN(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return IsNaN(value) && (((1ULL << (kSigSize - 1)) & uint_val) == 0);
   }
   static inline bool IsQNaN(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return IsNaN(value) && (((1ULL << (kSigSize - 1)) & uint_val) != 0);
   }
   static inline bool SignBit(T value) {
-    UIntType uint_val = *reinterpret_cast<UIntType *>(&value);
+    UIntType uint_val = *reinterpret_cast<UIntType*>(&value);
     return 1 == (uint_val >> (kBitSize - 1));
   }
 };
@@ -426,28 +426,28 @@
 
   if (half.value == FPTypeInfo<HalfFP>::kPosInf) {
     float_uint = FPTypeInfo<float>::kPosInf;
-    return *reinterpret_cast<float *>(&float_uint);
+    return *reinterpret_cast<float*>(&float_uint);
   }
 
   if (half.value == FPTypeInfo<HalfFP>::kNegInf) {
     float_uint = FPTypeInfo<float>::kNegInf;
-    return *reinterpret_cast<float *>(&float_uint);
+    return *reinterpret_cast<float*>(&float_uint);
   }
 
   if (FPTypeInfo<HalfFP>::IsNaN(half)) {
     float_uint = FPTypeInfo<float>::kCanonicalNaN;
     float_uint |= sign << (FPTypeInfo<float>::kBitSize - 1);
-    return *reinterpret_cast<float *>(&float_uint);
+    return *reinterpret_cast<float*>(&float_uint);
   }
 
   if (half.value == 0) {
     float_uint = 0;
-    return *reinterpret_cast<float *>(&float_uint);
+    return *reinterpret_cast<float*>(&float_uint);
   }
 
   if (half.value == 1 << (FPTypeInfo<HalfFP>::kBitSize - 1)) {
     float_uint = 1 << (FPTypeInfo<float>::kBitSize - 1);
-    return *reinterpret_cast<float *>(&float_uint);
+    return *reinterpret_cast<float*>(&float_uint);
   }
 
   uint32_t exp = (half.value & FPTypeInfo<HalfFP>::kExpMask) >>
@@ -467,7 +467,7 @@
   sig <<= FPTypeInfo<float>::kSigSize - FPTypeInfo<HalfFP>::kSigSize;
   float_uint = (exp << FPTypeInfo<float>::kSigSize) | sig;
   float_uint |= sign << (FPTypeInfo<float>::kBitSize - 1);
-  return *reinterpret_cast<float *>(&float_uint);
+  return *reinterpret_cast<float*>(&float_uint);
 }
 
 // A replacement for std::is_floating_point that works for half precision.
diff --git a/mpact/sim/generic/wrapper_operand.h b/mpact/sim/generic/wrapper_operand.h
index f5954ed..daf9e00 100644
--- a/mpact/sim/generic/wrapper_operand.h
+++ b/mpact/sim/generic/wrapper_operand.h
@@ -34,11 +34,11 @@
 template <typename T>
 class WrapperSourceOperand : public SourceOperandInterface {
  public:
-  WrapperSourceOperand(T *value, const std::vector<int> &shape)
+  WrapperSourceOperand(T* value, const std::vector<int>& shape)
       : value_(value), shape_(shape) {}
   WrapperSourceOperand() = delete;
-  WrapperSourceOperand(const WrapperSourceOperand &) = delete;
-  WrapperSourceOperand &operator=(const WrapperSourceOperand &) = delete;
+  WrapperSourceOperand(const WrapperSourceOperand&) = delete;
+  WrapperSourceOperand& operator=(const WrapperSourceOperand&) = delete;
   bool AsBool(int index) override { return false; }
   int8_t AsInt8(int index) override { return 0; }
   uint8_t AsUint8(int index) override { return 0; }
@@ -57,7 +57,7 @@
   std::string AsString() const override { return value_->AsString(); }
 
  private:
-  T *value_;
+  T* value_;
   std::vector<int> shape_;
 };
 
@@ -67,17 +67,17 @@
 template <typename T>
 class WrapperDestinationOperand : public DestinationOperandInterface {
  public:
-  WrapperDestinationOperand(T *value, const std::vector<int> &shape)
+  WrapperDestinationOperand(T* value, const std::vector<int>& shape)
       : value_(value), shape_(shape) {}
   WrapperDestinationOperand() = delete;
-  WrapperDestinationOperand(const WrapperDestinationOperand &) = delete;
-  WrapperDestinationOperand &operator=(const WrapperDestinationOperand &) =
+  WrapperDestinationOperand(const WrapperDestinationOperand&) = delete;
+  WrapperDestinationOperand& operator=(const WrapperDestinationOperand&) =
       delete;
   ~WrapperDestinationOperand() override = default;
 
-  DataBuffer *AllocateDataBuffer() override { return nullptr; }
-  void InitializeDataBuffer(DataBuffer *db) override { /* Do nothing. */ }
-  DataBuffer *CopyDataBuffer() override { return nullptr; }
+  DataBuffer* AllocateDataBuffer() override { return nullptr; }
+  void InitializeDataBuffer(DataBuffer* db) override { /* Do nothing. */ }
+  DataBuffer* CopyDataBuffer() override { return nullptr; }
   int latency() const override { return 0; }
   // Return a pointer to the MR object.
   std::any GetObject() const override { return std::any(value_); }
@@ -87,7 +87,7 @@
   std::string AsString() const override { return value_->AsString(); }
 
  private:
-  T *value_;
+  T* value_;
   std::vector<int> shape_;
 };
 
diff --git a/mpact/sim/util/asm/opcode_assembler_interface.h b/mpact/sim/util/asm/opcode_assembler_interface.h
index 1663787..2894626 100644
--- a/mpact/sim/util/asm/opcode_assembler_interface.h
+++ b/mpact/sim/util/asm/opcode_assembler_interface.h
@@ -42,7 +42,7 @@
   uint32_t type;
   uint64_t addend;
   uint16_t section_index;
-  RelocationInfo(uint64_t offset, const std::string &symbol, uint32_t type,
+  RelocationInfo(uint64_t offset, const std::string& symbol, uint32_t type,
                  uint64_t addend, uint16_t section_index)
       : offset(offset),
         symbol(symbol),
@@ -55,7 +55,7 @@
  public:
   virtual ~OpcodeAssemblerInterface() = default;
   using AddSymbolCallback = absl::AnyInvocable<absl::Status(
-      const std::string &, ELFIO::Elf64_Addr /*value*/,
+      const std::string&, ELFIO::Elf64_Addr /*value*/,
       ELFIO::Elf_Xword /*size*/, uint8_t /*type*/, uint8_t /*binding*/,
       uint8_t /*other*/)>;
   // Takes the current address, the text for the assembly instruction (including
@@ -65,9 +65,9 @@
   // the increment to the address after the instruction is encoded.
   virtual absl::StatusOr<size_t> Encode(
       uint64_t address, absl::string_view text,
-      AddSymbolCallback add_symbol_callback, ResolverInterface *resolver,
-      std::vector<uint8_t> &bytes,
-      std::vector<RelocationInfo> &relocations) = 0;
+      AddSymbolCallback add_symbol_callback, ResolverInterface* resolver,
+      std::vector<uint8_t>& bytes,
+      std::vector<RelocationInfo>& relocations) = 0;
 };
 
 }  // namespace assembler
diff --git a/mpact/sim/util/asm/resolver.cc b/mpact/sim/util/asm/resolver.cc
index f8ec781..e82087d 100644
--- a/mpact/sim/util/asm/resolver.cc
+++ b/mpact/sim/util/asm/resolver.cc
@@ -26,8 +26,8 @@
 }
 
 SymbolResolver::SymbolResolver(
-    int elf_file_class, ELFIO::section *symtab,
-    const absl::flat_hash_map<std::string, ELFIO::Elf_Word> &symbol_indices)
+    int elf_file_class, ELFIO::section* symtab,
+    const absl::flat_hash_map<std::string, ELFIO::Elf_Word>& symbol_indices)
     : elf_file_class_(elf_file_class),
       symtab_(symtab),
       symbol_indices_(symbol_indices) {}
@@ -40,10 +40,10 @@
   }
   auto index = iter->second;
   if (elf_file_class_ == ELFCLASS64) {
-    auto *sym = reinterpret_cast<const ELFIO::Elf64_Sym *>(symtab_->get_data());
+    auto* sym = reinterpret_cast<const ELFIO::Elf64_Sym*>(symtab_->get_data());
     return sym[index].st_value;
   } else if (elf_file_class_ == ELFCLASS32) {
-    auto *sym = reinterpret_cast<const ELFIO::Elf32_Sym *>(symtab_->get_data());
+    auto* sym = reinterpret_cast<const ELFIO::Elf32_Sym*>(symtab_->get_data());
     return sym[index].st_value;
   }
   return absl::InternalError("Unsupported ELF file class");
diff --git a/mpact/sim/util/asm/resolver.h b/mpact/sim/util/asm/resolver.h
index 3adb3ff..8d81b50 100644
--- a/mpact/sim/util/asm/resolver.h
+++ b/mpact/sim/util/asm/resolver.h
@@ -49,17 +49,17 @@
 class SymbolResolver : public ResolverInterface {
  public:
   SymbolResolver(
-      int elf_file_class, ELFIO::section *symtab,
-      const absl::flat_hash_map<std::string, ELFIO::Elf_Word> &symbol_indices);
+      int elf_file_class, ELFIO::section* symtab,
+      const absl::flat_hash_map<std::string, ELFIO::Elf_Word>& symbol_indices);
   absl::StatusOr<uint64_t> Resolve(absl::string_view text) override;
 
  private:
   // Elf file class.
   int elf_file_class_ = 0;
   // The symbol table ELF section.
-  ELFIO::section *symtab_;
+  ELFIO::section* symtab_;
   // Map from symbol name to symbol index in the symbol table.
-  const absl::flat_hash_map<std::string, ELFIO::Elf_Word> &symbol_indices_;
+  const absl::flat_hash_map<std::string, ELFIO::Elf_Word>& symbol_indices_;
 };
 
 }  // namespace mpact::sim::util::assembler
diff --git a/mpact/sim/util/asm/simple_assembler.cc b/mpact/sim/util/asm/simple_assembler.cc
index aff0218..afb2c13 100644
--- a/mpact/sim/util/asm/simple_assembler.cc
+++ b/mpact/sim/util/asm/simple_assembler.cc
@@ -91,7 +91,7 @@
 // then it returns an error.
 template <typename T>
 absl::StatusOr<T> SimpleTextToInt(absl::string_view text,
-                                  ResolverInterface *resolver = nullptr) {
+                                  ResolverInterface* resolver = nullptr) {
   T value;
   if (text.substr(0, 2) == "0x") {
     if (absl::SimpleHexAtoi(text.substr(2), &value)) return value;
@@ -174,7 +174,7 @@
 // interface is optional and is used to resolve any symbol names in the text.
 template <typename T>
 absl::StatusOr<std::vector<T>> GetValues(
-    absl::string_view remainder, ResolverInterface *resolver = nullptr) {
+    absl::string_view remainder, ResolverInterface* resolver = nullptr) {
   std::vector<T> values;
   static RE2 value_re("\\s*(0x[0-9a-fA-F]+|-?[0-9]+)\\s*(?:,|$)");
   std::string match;
@@ -190,7 +190,7 @@
 // Specialization of the above that handles char values.
 template <>
 absl::StatusOr<std::vector<char>> GetValues<char>(absl::string_view remainder,
-                                                  ResolverInterface *resolver) {
+                                                  ResolverInterface* resolver) {
   std::vector<char> values;
   static RE2 value_re("\\s*'(.{1,2})'\\s*(?:,|$)");
   std::string match;
@@ -207,7 +207,7 @@
 // Specialization of the above that handles double quoted string values.
 template <>
 absl::StatusOr<std::vector<std::string>> GetValues<std::string>(
-    absl::string_view remainder, ResolverInterface *resolver) {
+    absl::string_view remainder, ResolverInterface* resolver) {
   std::vector<std::string> values;
   std::string match;
   static RE2 value_re("\\s*\"([^\"]*)\"\\s*(?:,|$)");
@@ -232,8 +232,8 @@
 
 // Helper that converts a vector of integer values to a vector of bytes.
 template <typename T>
-inline void ConvertToBytes(const std::vector<T> &values,
-                           std::vector<uint8_t> &bytes) {
+inline void ConvertToBytes(const std::vector<T>& values,
+                           std::vector<uint8_t>& bytes) {
   union {
     T i;
     uint8_t b[sizeof(T)];
@@ -249,7 +249,7 @@
 }  // namespace
 
 SimpleAssembler::SimpleAssembler(absl::string_view comment, int elf_file_class,
-                                 OpcodeAssemblerInterface *opcode_assembler_if)
+                                 OpcodeAssemblerInterface* opcode_assembler_if)
     : elf_file_class_(elf_file_class),
       opcode_assembler_if_(opcode_assembler_if),
       comment_re_(absl::StrCat("^(.*?)(?:", comment, ".*?)?(\\\\)?$")),
@@ -298,8 +298,8 @@
   string_accessor_ = nullptr;
 }
 
-absl::Status SimpleAssembler::Parse(std::istream &is,
-                                    ResolverInterface *zero_resolver) {
+absl::Status SimpleAssembler::Parse(std::istream& is,
+                                    ResolverInterface* zero_resolver) {
   // A trivial symbol resolver that always returns 0.
   bool own_zero_resolver = false;
   std::function<void()> cleanup = []() {};
@@ -347,7 +347,7 @@
     if (RE2::FullMatch(line, asm_line_re_, &label, &statement)) {
       std::vector<uint8_t> byte_vector;
       std::vector<RelocationInfo> relo_vector;
-      auto *section = current_section_;
+      auto* section = current_section_;
       uint64_t address =
           (section == nullptr) ? 0 : section_address_map_[section];
       if (!statement.empty()) {
@@ -389,7 +389,7 @@
   }
 
   // Add undefined symbols to the symbol table.
-  for (auto const &symbol : undefined_symbols_) {
+  for (auto const& symbol : undefined_symbols_) {
     auto status = AddSymbol(symbol, 0, 0, STT_NOTYPE, 0, 0, nullptr);
     if (!status.ok()) {
       cleanup();
@@ -408,7 +408,7 @@
 
 absl::Status SimpleAssembler::CreateExecutable(
     uint64_t base_address, uint64_t entry_point,
-    ResolverInterface *symbol_resolver) {
+    ResolverInterface* symbol_resolver) {
   return CreateExecutable(base_address, absl::StrCat(entry_point),
                           symbol_resolver);
 }
@@ -420,10 +420,10 @@
                                                  uint64_t bss_segment_start) {
   auto num_symbols = symtab_->get_size() / sizeof(SymbolType);
   auto size = num_symbols * sizeof(SymbolType);
-  auto *symbols = new SymbolType[num_symbols];
+  auto* symbols = new SymbolType[num_symbols];
   std::memcpy(symbols, symtab_->get_data(), size);
   for (int i = 0; i < num_symbols; ++i) {
-    auto &sym = symbols[i];
+    auto& sym = symbols[i];
     auto shndx = sym.st_shndx;
     std::string name = string_accessor_->get_string(sym.st_name);
     if (global_symbols_.contains(name)) {
@@ -439,7 +439,7 @@
       sym.st_value += bss_segment_start;
     }
   }
-  symtab_->set_data(reinterpret_cast<char *>(symbols), size);
+  symtab_->set_data(reinterpret_cast<char*>(symbols), size);
   delete[] symbols;
 }
 
@@ -447,28 +447,28 @@
 void SimpleAssembler::UpdateSymbolsForRelocatable() {
   auto num_symbols = symtab_->get_size() / sizeof(SymbolType);
   auto size = num_symbols * sizeof(SymbolType);
-  auto *symbols = new SymbolType[num_symbols];
+  auto* symbols = new SymbolType[num_symbols];
   std::memcpy(symbols, symtab_->get_data(), size);
   for (int i = 0; i < num_symbols; ++i) {
-    auto &sym = symbols[i];
+    auto& sym = symbols[i];
     std::string name = string_accessor_->get_string(sym.st_name);
     if (global_symbols_.contains(name)) {
       sym.st_info = ELF_ST_INFO(STB_GLOBAL, ELF_ST_TYPE(sym.st_info));
     }
   }
-  symtab_->set_data(reinterpret_cast<char *>(symbols), size);
+  symtab_->set_data(reinterpret_cast<char*>(symbols), size);
   delete[] symbols;
 }
 
 absl::Status SimpleAssembler::CreateExecutable(
-    uint64_t base_address, const std::string &entry_point,
-    ResolverInterface *symbol_resolver) {
+    uint64_t base_address, const std::string& entry_point,
+    ResolverInterface* symbol_resolver) {
   if (!undefined_symbols_.empty()) {
     std::string message;
     absl::StrAppend(
         &message,
         "Cannot create executable with the following undefined symbols: ");
-    for (auto const &symbol : undefined_symbols_) {
+    for (auto const& symbol : undefined_symbols_) {
       absl::StrAppend(&message, "    ", symbol, "\n");
     }
     return absl::InvalidArgumentError(message);
@@ -481,7 +481,7 @@
   //   data segment starting at the end of the text segment + any alignment.
   // The bss section is added to the end of the data segment + any alignment.
 
-  ELFIO::segment *text_segment = nullptr;
+  ELFIO::segment* text_segment = nullptr;
   uint64_t text_segment_start = 0;
   if (text_section_ != nullptr) {
     text_segment_start = base_address & ~4095ULL;
@@ -496,7 +496,7 @@
     text_segment->set_align(4096);
   }
 
-  ELFIO::segment *data_segment = nullptr;
+  ELFIO::segment* data_segment = nullptr;
   uint64_t data_segment_start = 0;
   uint64_t bss_segment_start = 0;
   if ((data_section_ != nullptr) || (bss_section_ != nullptr)) {
@@ -588,10 +588,10 @@
 // Helper function to add a relocation entry to a relocation section.
 template <typename RelocaType>
 absl::Status AddRelocationEntries(
-    const std::vector<RelocationInfo> &relo_vector,
-    absl::flat_hash_map<std::string, ELFIO::Elf_Word> &symbol_indices,
-    ELFIO::section *reloca_section) {
-  for (auto const &relo : relo_vector) {
+    const std::vector<RelocationInfo>& relo_vector,
+    absl::flat_hash_map<std::string, ELFIO::Elf_Word>& symbol_indices,
+    ELFIO::section* reloca_section) {
+  for (auto const& relo : relo_vector) {
     RelocaType rela;
     rela.r_offset = relo.offset;
     rela.r_addend = relo.addend;
@@ -605,7 +605,7 @@
     } else {
       rela.r_info = ELF32_R_INFO(iter->second, relo.type);
     }
-    reloca_section->append_data(reinterpret_cast<const char *>(&rela),
+    reloca_section->append_data(reinterpret_cast<const char*>(&rela),
                                 sizeof(RelocaType));
   }
   return absl::OkStatus();
@@ -617,7 +617,7 @@
 void SimpleAssembler::UpdateSymtabHeaderInfo() {
   int last_local = 0;
   auto syms =
-      absl::MakeSpan(reinterpret_cast<const SymbolType *>(symtab_->get_data()),
+      absl::MakeSpan(reinterpret_cast<const SymbolType*>(symtab_->get_data()),
                      symtab_->get_size() / sizeof(SymbolType));
   for (int i = 0; i < syms.size(); ++i) {
     auto name = string_accessor_->get_string(syms[i].st_name);
@@ -628,7 +628,7 @@
 }
 
 absl::Status SimpleAssembler::CreateRelocatable(
-    ResolverInterface *symbol_resolver) {
+    ResolverInterface* symbol_resolver) {
   writer_.set_type(ET_REL);
   // Reset the section address map to zero since we are creating a relocatable
   // file.
@@ -678,10 +678,10 @@
     // First scan through the entries relocation vector and group them by
     // the section in which the relocation is to be applied.
     absl::flat_hash_map<uint16_t, std::vector<RelocationInfo>> relo_map;
-    for (auto const &relo : relo_vector) {
+    for (auto const& relo : relo_vector) {
       relo_map[relo.section_index].push_back(relo);
     }
-    for (auto const &[section_index, relo_vec] : relo_map) {
+    for (auto const& [section_index, relo_vec] : relo_map) {
       if (section_index == 0) {
         cleanup();
         return absl::InternalError(
@@ -695,7 +695,7 @@
       // Now, create a relocation section for each key in the map.
       std::string name =
           absl::StrCat(".rela", section_index_map_[section_index]->get_name());
-      auto *rela_section = writer_.sections.add(name);
+      auto* rela_section = writer_.sections.add(name);
       rela_section->set_type(SHT_RELA);
       rela_section->set_flags(SHF_INFO_LINK);
       rela_section->set_entry_size(elf_file_class_ == ELFCLASS64
@@ -728,14 +728,14 @@
 }
 
 absl::Status SimpleAssembler::ParsePassTwo(
-    std::vector<RelocationInfo> &relo_vector,
-    ResolverInterface *symbol_resolver) {
+    std::vector<RelocationInfo>& relo_vector,
+    ResolverInterface* symbol_resolver) {
   // Now fill in the sections. Parse each of the lines saved in the first
   // pass.
-  for (auto const &line : lines_) {
+  for (auto const& line : lines_) {
     std::vector<uint8_t> byte_vector;
     absl::Status status;
-    auto *section = current_section_;
+    auto* section = current_section_;
     auto relo_size = relo_vector.size();
     auto address = section_address_map_[section];
     if (line[0] == '.') {
@@ -758,7 +758,7 @@
       if (section == nullptr) {
         return absl::InternalError("Data is added to a null section");
       }
-      section->append_data(reinterpret_cast<const char *>(byte_vector.data()),
+      section->append_data(reinterpret_cast<const char*>(byte_vector.data()),
                            byte_vector.size());
     }
   }
@@ -766,7 +766,7 @@
 }
 
 // Top level function that writes the ELF file out to disk.
-absl::Status SimpleAssembler::Write(std::ostream &os) {
+absl::Status SimpleAssembler::Write(std::ostream& os) {
   writer_.save(os);
   return absl::OkStatus();
 }
@@ -777,12 +777,12 @@
 // tokens separated by spaces. The argument is parsed using regular
 // expressions. The byte values are appended to the given vector.
 absl::Status SimpleAssembler::ParseAsmDirective(
-    absl::string_view line, uint64_t address, ResolverInterface *resolver,
-    std::vector<uint8_t> &byte_values,
-    std::vector<RelocationInfo> &relocations) {
+    absl::string_view line, uint64_t address, ResolverInterface* resolver,
+    std::vector<uint8_t>& byte_values,
+    std::vector<RelocationInfo>& relocations) {
   std::string match;
   std::string remainder;
-  ELFIO::section *section = current_section_;
+  ELFIO::section* section = current_section_;
   uint64_t size = 0;
   std::string directive;
   std::string label;
@@ -819,22 +819,22 @@
     if (!res.ok()) return res.status();
     auto values = res.value();
     size = values.size();
-    for (auto const &value : values) byte_values.push_back(value);
+    for (auto const& value : values) byte_values.push_back(value);
   } else if (match == "char") {
     // .char
     auto res = GetValues<char>(remainder, resolver);
     if (!res.ok()) return res.status();
     auto values = res.value();
     size = values.size();
-    for (auto const &value : values) byte_values.push_back(value);
+    for (auto const& value : values) byte_values.push_back(value);
   } else if (match == "cstring") {
     // .cstring
     auto res = GetValues<std::string>(remainder, resolver);
     if (!res.ok()) return res.status();
     auto values = res.value();
     size = 0;
-    for (auto const &value : values) {
-      for (auto const &c : value) byte_values.push_back(c);
+    for (auto const& value : values) {
+      for (auto const& c : value) byte_values.push_back(c);
       byte_values.push_back('\0');
       size += value.size() + 1;
     }
@@ -846,7 +846,7 @@
     auto res = GetLabels(remainder);
     if (!res.ok()) return res.status();
     auto values = res.value();
-    for (auto const &value : values) {
+    for (auto const& value : values) {
       global_symbols_.insert(value);
     }
   } else if (match == "long") {
@@ -878,8 +878,8 @@
     if (!res.ok()) return res.status();
     auto values = res.value();
     size = 0;
-    for (auto const &value : values) {
-      for (auto const &c : value) byte_values.push_back(c);
+    for (auto const& value : values) {
+      for (auto const& c : value) byte_values.push_back(c);
       size += value.size();
     }
   } else if (match == "text") {
@@ -891,7 +891,7 @@
     if (!res.ok()) return res.status();
     auto values = res.value();
     size = values.size();
-    for (auto const &value : values) byte_values.push_back(value);
+    for (auto const& value : values) byte_values.push_back(value);
   } else if (match == "ulong") {
     // .ulong
     auto res = GetValues<uint64_t>(remainder);
@@ -949,9 +949,9 @@
 // expected to be a single line of text. The byte values are appended to the
 // given vector.
 absl::Status SimpleAssembler::ParseAsmStatement(
-    absl::string_view line, uint64_t address, ResolverInterface *resolver,
-    std::vector<uint8_t> &byte_values,
-    std::vector<RelocationInfo> &relocations) {
+    absl::string_view line, uint64_t address, ResolverInterface* resolver,
+    std::vector<uint8_t>& byte_values,
+    std::vector<RelocationInfo>& relocations) {
   // Call the target specific assembler to encode the statement.
   auto result = opcode_assembler_if_->Encode(
       address, line,
@@ -962,9 +962,9 @@
   return absl::OkStatus();
 }
 
-void SimpleAssembler::SetTextSection(const std::string &name) {
+void SimpleAssembler::SetTextSection(const std::string& name) {
   // First check if the section already exists.
-  auto *section = writer_.sections[name];
+  auto* section = writer_.sections[name];
   if (section != nullptr) {
     current_section_ = section;
     return;
@@ -983,9 +983,9 @@
   section_index_map_.insert({section->get_index(), text_section_});
 }
 
-void SimpleAssembler::SetDataSection(const std::string &name) {
+void SimpleAssembler::SetDataSection(const std::string& name) {
   // First check if the section already exists.
-  auto *section = writer_.sections[name];
+  auto* section = writer_.sections[name];
   if (section != nullptr) {
     current_section_ = section;
     return;
@@ -1004,9 +1004,9 @@
   section_index_map_.insert({section->get_index(), data_section_});
 }
 
-void SimpleAssembler::SetBssSection(const std::string &name) {
+void SimpleAssembler::SetBssSection(const std::string& name) {
   // First check if the section already exists.
-  auto *section = writer_.sections[name];
+  auto* section = writer_.sections[name];
   if (section != nullptr) {
     current_section_ = section;
     return;
@@ -1025,17 +1025,17 @@
   section_index_map_.insert({section->get_index(), bss_section_});
 }
 absl::Status SimpleAssembler::AddSymbolToCurrentSection(
-    const std::string &name, ELFIO::Elf64_Addr value, ELFIO::Elf_Xword size,
+    const std::string& name, ELFIO::Elf64_Addr value, ELFIO::Elf_Xword size,
     uint8_t type, uint8_t binding, uint8_t other) {
   return AddSymbol(name, value, size, type, binding, other, current_section_);
 }
 
-absl::Status SimpleAssembler::AddSymbol(const std::string &name,
+absl::Status SimpleAssembler::AddSymbol(const std::string& name,
                                         ELFIO::Elf64_Addr value,
                                         ELFIO::Elf_Xword size, uint8_t type,
                                         uint8_t binding, uint8_t other,
-                                        const std::string &section_name) {
-  ELFIO::section *section = nullptr;
+                                        const std::string& section_name) {
+  ELFIO::section* section = nullptr;
   if (!section_name.empty()) {
     section = writer_.sections[section_name];
     if (section == nullptr) {
@@ -1046,11 +1046,11 @@
   return AddSymbol(name, value, size, type, binding, other, section);
 }
 
-absl::Status SimpleAssembler::AddSymbol(const std::string &name,
+absl::Status SimpleAssembler::AddSymbol(const std::string& name,
                                         ELFIO::Elf64_Addr value,
                                         ELFIO::Elf_Xword size, uint8_t type,
                                         uint8_t binding, uint8_t other,
-                                        ELFIO::section *section) {
+                                        ELFIO::section* section) {
   auto iter = symbol_indices_.find(name);
   if (iter != symbol_indices_.end()) {
     return absl::AlreadyExistsError(
@@ -1079,7 +1079,7 @@
   undefined_symbols_.insert(name_str);
 }
 
-absl::Status SimpleAssembler::AppendData(const char *data, size_t size) {
+absl::Status SimpleAssembler::AppendData(const char* data, size_t size) {
   if (current_section_ == nullptr) {
     return absl::FailedPreconditionError("No current section");
   }
diff --git a/mpact/sim/util/asm/simple_assembler.h b/mpact/sim/util/asm/simple_assembler.h
index 1f705c5..c684685 100644
--- a/mpact/sim/util/asm/simple_assembler.h
+++ b/mpact/sim/util/asm/simple_assembler.h
@@ -68,48 +68,48 @@
   //   opcode_assembler_if: The opcode assembler interface to use for parsing
   //     and encoding assembly statements.
   SimpleAssembler(absl::string_view comment, int elf_file_class,
-                  OpcodeAssemblerInterface *opcode_assembler_if);
-  SimpleAssembler(const SimpleAssembler &) = delete;
-  SimpleAssembler &operator=(const SimpleAssembler &) = delete;
+                  OpcodeAssemblerInterface* opcode_assembler_if);
+  SimpleAssembler(const SimpleAssembler&) = delete;
+  SimpleAssembler& operator=(const SimpleAssembler&) = delete;
   virtual ~SimpleAssembler();
 
   // Parse the input stream as assembly.
-  absl::Status Parse(std::istream &is,
-                     ResolverInterface *zero_resolver = nullptr);
+  absl::Status Parse(std::istream& is,
+                     ResolverInterface* zero_resolver = nullptr);
   // Add the symbol to the symbol table for the current section. See ELFIO
   // documentation for details of the meaning of the parameters.
-  absl::Status AddSymbolToCurrentSection(const std::string &name,
+  absl::Status AddSymbolToCurrentSection(const std::string& name,
                                          ELFIO::Elf64_Addr value,
                                          ELFIO::Elf_Xword size, uint8_t type,
                                          uint8_t binding, uint8_t other);
   // Add the symbol to the symbol table for the named section. See ELFIO
   // documentation for details of the meaning of the parameters.
-  absl::Status AddSymbol(const std::string &name, ELFIO::Elf64_Addr value,
+  absl::Status AddSymbol(const std::string& name, ELFIO::Elf64_Addr value,
                          ELFIO::Elf_Xword size, uint8_t type, uint8_t binding,
-                         uint8_t other, const std::string &section_name);
+                         uint8_t other, const std::string& section_name);
   // Create executable ELF file with the given value as the entry point.
   // The text segment will be laid out starting at base address, followed by
   // the data segment.
   absl::Status CreateExecutable(uint64_t base_address,
-                                const std::string &entry_point,
-                                ResolverInterface *symbol_resolver = nullptr);
+                                const std::string& entry_point,
+                                ResolverInterface* symbol_resolver = nullptr);
   absl::Status CreateExecutable(uint64_t base_address, uint64_t entry_point,
-                                ResolverInterface *symbol_resolver = nullptr);
+                                ResolverInterface* symbol_resolver = nullptr);
   // Create a relocatable ELF file.
-  absl::Status CreateRelocatable(ResolverInterface *symbol_resolver = nullptr);
+  absl::Status CreateRelocatable(ResolverInterface* symbol_resolver = nullptr);
   // Write the ELF file to the given output stream.
-  absl::Status Write(std::ostream &os);
+  absl::Status Write(std::ostream& os);
   // Access the ELF writer.
-  ELFIO::elfio &writer() { return writer_; }
+  ELFIO::elfio& writer() { return writer_; }
 
   // Add a symbol reference to the symbol table if it is not already defined.
   void SimpleAddSymbol(absl::string_view name);
 
   // Getters and setters.
-  absl::flat_hash_map<std::string, ELFIO::Elf_Word> &symbol_indices() {
+  absl::flat_hash_map<std::string, ELFIO::Elf_Word>& symbol_indices() {
     return symbol_indices_;
   }
-  ELFIO::section *symtab() { return symtab_; }
+  ELFIO::section* symtab() { return symtab_; }
   unsigned data_address_unit() { return data_address_unit_; }
   void set_data_address_unit(unsigned data_address_unit) {
     data_address_unit_ = data_address_unit;
@@ -126,57 +126,57 @@
   template <typename SymbolType>
   void UpdateSymtabHeaderInfo();
   // Perform second pass of parsing.
-  absl::Status ParsePassTwo(std::vector<RelocationInfo> &relo_vector,
-                            ResolverInterface *symbol_resolver);
+  absl::Status ParsePassTwo(std::vector<RelocationInfo>& relo_vector,
+                            ResolverInterface* symbol_resolver);
   // Parse and process an assembly directive.
   absl::Status ParseAsmDirective(absl::string_view line, uint64_t address,
-                                 ResolverInterface *resolver,
-                                 std::vector<uint8_t> &byte_values,
-                                 std::vector<RelocationInfo> &relocations);
+                                 ResolverInterface* resolver,
+                                 std::vector<uint8_t>& byte_values,
+                                 std::vector<RelocationInfo>& relocations);
   // Parse and process and assembly statement.
   absl::Status ParseAsmStatement(absl::string_view line, uint64_t address,
-                                 ResolverInterface *resolver,
-                                 std::vector<uint8_t> &byte_values,
-                                 std::vector<RelocationInfo> &relocations);
+                                 ResolverInterface* resolver,
+                                 std::vector<uint8_t>& byte_values,
+                                 std::vector<RelocationInfo>& relocations);
   // Add the symbol to the symbol table.
-  absl::Status AddSymbol(const std::string &name, ELFIO::Elf64_Addr value,
+  absl::Status AddSymbol(const std::string& name, ELFIO::Elf64_Addr value,
                          ELFIO::Elf_Xword size, uint8_t type, uint8_t binding,
-                         uint8_t other, ELFIO::section *section);
+                         uint8_t other, ELFIO::section* section);
   // Append the data to the current section.
-  absl::Status AppendData(const char *data, size_t size);
+  absl::Status AppendData(const char* data, size_t size);
 
   // Set the the given section as the current section. Create if it has not
   // already been created.
-  void SetTextSection(const std::string &name);
-  void SetDataSection(const std::string &name);
-  void SetBssSection(const std::string &name);
+  void SetTextSection(const std::string& name);
+  void SetDataSection(const std::string& name);
+  void SetBssSection(const std::string& name);
 
   // ELF file class.
   int elf_file_class_ = 0;
   // Elf file top level object.
   ELFIO::elfio writer_;
   // The current section being processed.
-  ELFIO::section *current_section_ = nullptr;
+  ELFIO::section* current_section_ = nullptr;
   // Map from section index to section pointer.
-  absl::flat_hash_map<uint16_t, ELFIO::section *> section_index_map_;
+  absl::flat_hash_map<uint16_t, ELFIO::section*> section_index_map_;
   // Interface used to parse and encode assembly statements.
-  OpcodeAssemblerInterface *opcode_assembler_if_ = nullptr;
+  OpcodeAssemblerInterface* opcode_assembler_if_ = nullptr;
   // Interface used to access strings in the string table.
-  ELFIO::string_section_accessor *string_accessor_ = nullptr;
+  ELFIO::string_section_accessor* string_accessor_ = nullptr;
   // Interface used to access symbols in the symbol table.
-  ELFIO::symbol_section_accessor *symbol_accessor_ = nullptr;
+  ELFIO::symbol_section_accessor* symbol_accessor_ = nullptr;
   // ELF symbol table section.
-  ELFIO::section *symtab_ = nullptr;
+  ELFIO::section* symtab_ = nullptr;
   // Elf string table section.
-  ELFIO::section *strtab_ = nullptr;
+  ELFIO::section* strtab_ = nullptr;
   // Map that tracks the current address of each section.
-  absl::flat_hash_map<ELFIO::section *, uint64_t> section_address_map_;
+  absl::flat_hash_map<ELFIO::section*, uint64_t> section_address_map_;
 
   std::vector<std::string> lines_;
   // Section pointers.
-  ELFIO::section *text_section_ = nullptr;
-  ELFIO::section *data_section_ = nullptr;
-  ELFIO::section *bss_section_ = nullptr;
+  ELFIO::section* text_section_ = nullptr;
+  ELFIO::section* data_section_ = nullptr;
+  ELFIO::section* bss_section_ = nullptr;
   // Regular expressions used to parse the assembly source.
   RE2 comment_re_;
   RE2 asm_line_re_;
diff --git a/mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.cc b/mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.cc
index 9f45dbf..7c2edba 100644
--- a/mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.cc
+++ b/mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.cc
@@ -49,14 +49,14 @@
 absl::StatusOr<std::tuple<uint64_t, int>>
 RiscV64XBinEncoderInterface::GetOpcodeEncoding(SlotEnum slot, int entry,
                                                OpcodeEnum opcode,
-                                               ResolverInterface *resolver) {
+                                               ResolverInterface* resolver) {
   return encoding64::kOpcodeEncodings->at(opcode);
 }
 
 absl::StatusOr<uint64_t> RiscV64XBinEncoderInterface::GetSrcOpEncoding(
     uint64_t address, absl::string_view text, SlotEnum slot, int entry,
     OpcodeEnum opcode, SourceOpEnum source_op, int source_num,
-    ResolverInterface *resolver) {
+    ResolverInterface* resolver) {
   auto iter = source_op_map_.find(*source_op);
   if (iter == source_op_map_.end()) {
     return absl::NotFoundError(absl::StrCat(
@@ -68,7 +68,7 @@
 absl::Status RiscV64XBinEncoderInterface::AppendSrcOpRelocation(
     uint64_t address, absl::string_view text, SlotEnum slot, int entry,
     OpcodeEnum opcode, SourceOpEnum source_op, int source_num,
-    ResolverInterface *resolver, std::vector<RelocationInfo> &relocations) {
+    ResolverInterface* resolver, std::vector<RelocationInfo>& relocations) {
   auto iter = relocation_source_op_map_.find(std::tie(opcode, source_op));
   if (iter == relocation_source_op_map_.end()) return absl::OkStatus();
   return iter->second(address, text, resolver, relocations);
@@ -77,7 +77,7 @@
 absl::StatusOr<uint64_t> RiscV64XBinEncoderInterface::GetDestOpEncoding(
     uint64_t address, absl::string_view text, SlotEnum slot, int entry,
     OpcodeEnum opcode, DestOpEnum dest_op, int dest_num,
-    ResolverInterface *resolver) {
+    ResolverInterface* resolver) {
   auto iter = dest_op_map_.find(*dest_op);
   if (iter == dest_op_map_.end()) {
     return absl::NotFoundError(
@@ -89,7 +89,7 @@
 absl::Status RiscV64XBinEncoderInterface::AppendDestOpRelocation(
     uint64_t address, absl::string_view text, SlotEnum slot, int entry,
     OpcodeEnum opcode, DestOpEnum dest_op, int dest_num,
-    ResolverInterface *resolver, std::vector<RelocationInfo> &relocations) {
+    ResolverInterface* resolver, std::vector<RelocationInfo>& relocations) {
   // There are no destination operands that require relocation.
   return absl::OkStatus();
 }
@@ -97,7 +97,7 @@
 absl::StatusOr<uint64_t> RiscV64XBinEncoderInterface::GetListDestOpEncoding(
     uint64_t address, absl::string_view text, SlotEnum slot, int entry,
     OpcodeEnum opcode, ListDestOpEnum dest_op, int dest_num,
-    ResolverInterface *resolver) {
+    ResolverInterface* resolver) {
   auto iter = list_dest_op_map_.find(*dest_op);
   if (iter == list_dest_op_map_.end()) {
     return absl::NotFoundError(absl::StrCat(
@@ -109,7 +109,7 @@
 absl::StatusOr<uint64_t> RiscV64XBinEncoderInterface::GetListSrcOpEncoding(
     uint64_t address, absl::string_view text, SlotEnum slot, int entry,
     OpcodeEnum opcode, ListSourceOpEnum source_op, int source_num,
-    ResolverInterface *resolver) {
+    ResolverInterface* resolver) {
   auto iter = list_source_op_map_.find(*source_op);
   if (iter == list_source_op_map_.end()) {
     return absl::NotFoundError(absl::StrCat(
@@ -120,7 +120,7 @@
 
 absl::StatusOr<uint64_t> RiscV64XBinEncoderInterface::GetPredOpEncoding(
     uint64_t address, absl::string_view text, SlotEnum slot, int entry,
-    OpcodeEnum opcode, PredOpEnum pred_op, ResolverInterface *resolver) {
+    OpcodeEnum opcode, PredOpEnum pred_op, ResolverInterface* resolver) {
   auto iter = pred_op_map_.find(*pred_op);
   if (iter == pred_op_map_.end()) {
     return absl::NotFoundError(absl::StrCat(
diff --git a/mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.h b/mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.h
index 4c1d341..96b4912 100644
--- a/mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.h
+++ b/mpact/sim/util/asm/test/riscv64x_bin_encoder_interface.h
@@ -38,54 +38,54 @@
 class RiscV64XBinEncoderInterface : public RiscV64XEncoderInterfaceBase {
  public:
   RiscV64XBinEncoderInterface();
-  RiscV64XBinEncoderInterface(const RiscV64XBinEncoderInterface &) = delete;
-  RiscV64XBinEncoderInterface &operator=(const RiscV64XBinEncoderInterface &) =
+  RiscV64XBinEncoderInterface(const RiscV64XBinEncoderInterface&) = delete;
+  RiscV64XBinEncoderInterface& operator=(const RiscV64XBinEncoderInterface&) =
       delete;
   ~RiscV64XBinEncoderInterface() override = default;
 
   absl::StatusOr<std::tuple<uint64_t, int>> GetOpcodeEncoding(
       SlotEnum slot, int entry, OpcodeEnum opcode,
-      ResolverInterface *resolver) override;
+      ResolverInterface* resolver) override;
   absl::StatusOr<uint64_t> GetSrcOpEncoding(
       uint64_t address, absl::string_view text, SlotEnum slot, int entry,
       OpcodeEnum opcode, SourceOpEnum source_op, int source_num,
-      ResolverInterface *resolver) override;
+      ResolverInterface* resolver) override;
   absl::Status AppendSrcOpRelocation(
       uint64_t address, absl::string_view text, SlotEnum slot, int entry,
       OpcodeEnum opcode, SourceOpEnum source_op, int source_num,
-      ResolverInterface *resolver,
-      std::vector<RelocationInfo> &relocations) override;
+      ResolverInterface* resolver,
+      std::vector<RelocationInfo>& relocations) override;
   absl::StatusOr<uint64_t> GetDestOpEncoding(
       uint64_t address, absl::string_view text, SlotEnum slot, int entry,
       OpcodeEnum opcode, DestOpEnum dest_op, int dest_num,
-      ResolverInterface *resolver) override;
+      ResolverInterface* resolver) override;
   absl::Status AppendDestOpRelocation(
       uint64_t address, absl::string_view text, SlotEnum slot, int entry,
       OpcodeEnum opcode, DestOpEnum dest_op, int dest_num,
-      ResolverInterface *resolver,
-      std::vector<RelocationInfo> &relocations) override;
+      ResolverInterface* resolver,
+      std::vector<RelocationInfo>& relocations) override;
   absl::StatusOr<uint64_t> GetListDestOpEncoding(
       uint64_t address, absl::string_view text, SlotEnum slot, int entry,
       OpcodeEnum opcode, ListDestOpEnum dest_op, int dest_num,
-      ResolverInterface *resolver) override;
+      ResolverInterface* resolver) override;
   absl::StatusOr<uint64_t> GetListSrcOpEncoding(
       uint64_t address, absl::string_view text, SlotEnum slot, int entry,
       OpcodeEnum opcode, ListSourceOpEnum source_op, int source_num,
-      ResolverInterface *resolver) override;
+      ResolverInterface* resolver) override;
   absl::StatusOr<uint64_t> GetPredOpEncoding(
       uint64_t address, absl::string_view text, SlotEnum slot, int entry,
       OpcodeEnum opcode, PredOpEnum pred_op,
-      ResolverInterface *resolver) override;
+      ResolverInterface* resolver) override;
 
  private:
   using OpMap = absl::flat_hash_map<
       int, std::function<absl::StatusOr<uint64_t>(uint64_t, absl::string_view,
-                                                  ResolverInterface *)>>;
+                                                  ResolverInterface*)>>;
   using RelocationMap =
       absl::flat_hash_map<std::tuple<OpcodeEnum, SourceOpEnum>,
                           std::function<absl::Status(
-                              uint64_t, absl::string_view, ResolverInterface *,
-                              std::vector<RelocationInfo> &)>>;
+                              uint64_t, absl::string_view, ResolverInterface*,
+                              std::vector<RelocationInfo>&)>>;
 
   OpMap source_op_map_;
   RelocationMap relocation_source_op_map_;
diff --git a/mpact/sim/util/asm/test/riscv64x_instructions.cc b/mpact/sim/util/asm/test/riscv64x_instructions.cc
index 44990e6..9829c4d 100644
--- a/mpact/sim/util/asm/test/riscv64x_instructions.cc
+++ b/mpact/sim/util/asm/test/riscv64x_instructions.cc
@@ -20,7 +20,7 @@
 
 namespace mpact::sim::riscv {
 
-void RiscVIllegalInstruction(const generic::Instruction *inst) {
+void RiscVIllegalInstruction(const generic::Instruction* inst) {
   std::cerr << "Illegal instruction\n";
 }
 
diff --git a/mpact/sim/util/asm/test/riscv64x_instructions.h b/mpact/sim/util/asm/test/riscv64x_instructions.h
index 9dc1c42..2807440 100644
--- a/mpact/sim/util/asm/test/riscv64x_instructions.h
+++ b/mpact/sim/util/asm/test/riscv64x_instructions.h
@@ -21,7 +21,7 @@
 
 using ::mpact::sim::generic::Instruction;
 
-void RiscVIllegalInstruction(const generic::Instruction *inst);
+void RiscVIllegalInstruction(const generic::Instruction* inst);
 
 }  // namespace mpact::sim::riscv
 
diff --git a/mpact/sim/util/asm/test/riscv_bin_setters.cc b/mpact/sim/util/asm/test/riscv_bin_setters.cc
index 165b407..a411e87 100644
--- a/mpact/sim/util/asm/test/riscv_bin_setters.cc
+++ b/mpact/sim/util/asm/test/riscv_bin_setters.cc
@@ -48,8 +48,8 @@
 absl::NoDestructor<RE2> kSymRe("^\\s*(%[a-zA-Z0-9_]+)\\s*\\(?([^)]+)\\)?\\s*$");
 
 absl::Status RelocateAddiIImm12(uint64_t address, absl::string_view text,
-                                ResolverInterface *resolver,
-                                std::vector<RelocationInfo> &relocations) {
+                                ResolverInterface* resolver,
+                                std::vector<RelocationInfo>& relocations) {
   std::string relo;
   std::string sym;
   if (!RE2::FullMatch(text, *kSymRe, &relo, &sym)) return absl::OkStatus();
@@ -69,8 +69,8 @@
 }
 
 absl::Status RelocateJJImm20(uint64_t address, absl::string_view text,
-                             ResolverInterface *resolver,
-                             std::vector<RelocationInfo> &relocations) {
+                             ResolverInterface* resolver,
+                             std::vector<RelocationInfo>& relocations) {
   std::string relo;
   std::string sym;
   if (!RE2::FullMatch(text, *kSymRe, &relo, &sym)) return absl::OkStatus();
@@ -80,14 +80,14 @@
 }
 
 absl::Status RelocateJrJImm12(uint64_t address, absl::string_view text,
-                              ResolverInterface *resolver,
-                              std::vector<RelocationInfo> &relocations) {
+                              ResolverInterface* resolver,
+                              std::vector<RelocationInfo>& relocations) {
   return absl::OkStatus();
 }
 
 absl::Status RelocateLuiUImm20(uint64_t address, absl::string_view text,
-                               ResolverInterface *resolver,
-                               std::vector<RelocationInfo> &relocations) {
+                               ResolverInterface* resolver,
+                               std::vector<RelocationInfo>& relocations) {
   std::string relo;
   std::string sym;
   if (!RE2::FullMatch(text, *kSymRe, &relo, &sym)) return absl::OkStatus();
@@ -96,8 +96,8 @@
 }
 
 absl::Status RelocateSdSImm12(uint64_t address, absl::string_view text,
-                              ResolverInterface *resolver,
-                              std::vector<RelocationInfo> &relocations) {
+                              ResolverInterface* resolver,
+                              std::vector<RelocationInfo>& relocations) {
   std::string relo;
   std::string sym;
   if (!RE2::FullMatch(text, *kSymRe, &relo, &sym)) return absl::OkStatus();
diff --git a/mpact/sim/util/asm/test/riscv_bin_setters.h b/mpact/sim/util/asm/test/riscv_bin_setters.h
index d461381..83a435b 100644
--- a/mpact/sim/util/asm/test/riscv_bin_setters.h
+++ b/mpact/sim/util/asm/test/riscv_bin_setters.h
@@ -57,7 +57,7 @@
 
 template <typename T>
 absl::StatusOr<T> SimpleTextToInt(absl::string_view op_text,
-                                  ResolverInterface *resolver) {
+                                  ResolverInterface* resolver) {
   T value;
   static RE2 hex_re("^\\s*0x([0-9a-fA-F]+)\\s*$");
   static RE2 dec_re("^\\s*(-?[0-9]+)\\s*$");
@@ -98,31 +98,31 @@
 using ValueMap = absl::flat_hash_map<absl::string_view, uint64_t>;
 
 template <typename Enum, typename Map, typename Encoder>
-void AddRiscvSourceOpBinSetters(Map &map) {
+void AddRiscvSourceOpBinSetters(Map& map) {
   Insert(map, *Enum::kIImm12,
          [](uint64_t address, absl::string_view text,
-            ResolverInterface *resolver) -> absl::StatusOr<uint64_t> {
+            ResolverInterface* resolver) -> absl::StatusOr<uint64_t> {
            auto res = SimpleTextToInt<int32_t>(text, resolver);
            if (!res.ok()) return res.status();
            return Encoder::IType::InsertImm12(res.value(), 0ULL);
          });
   Insert(map, *Enum::kIUimm6,
          [](uint64_t address, absl::string_view text,
-            ResolverInterface *resolver) -> absl::StatusOr<uint64_t> {
+            ResolverInterface* resolver) -> absl::StatusOr<uint64_t> {
            auto res = SimpleTextToInt<uint32_t>(text, resolver);
            if (!res.ok()) return res.status();
            return Encoder::RSType::InsertRUimm6(res.value(), 0ULL);
          });
   Insert(map, *Enum::kJImm12,
          [](uint64_t address, absl::string_view text,
-            ResolverInterface *resolver) -> absl::StatusOr<uint64_t> {
+            ResolverInterface* resolver) -> absl::StatusOr<uint64_t> {
            auto res = SimpleTextToInt<int32_t>(text, resolver);
            if (!res.ok()) return res.status();
            return Encoder::IType::InsertImm12(res.value(), 0ULL);
          });
   Insert(map, *Enum::kJImm20,
          [](uint64_t address, absl::string_view text,
-            ResolverInterface *resolver) -> absl::StatusOr<uint64_t> {
+            ResolverInterface* resolver) -> absl::StatusOr<uint64_t> {
            auto res = SimpleTextToInt<int32_t>(text, resolver);
            if (!res.ok()) return res.status();
            uint32_t delta = res.value() - address;
@@ -131,7 +131,7 @@
          });
   Insert(map, *Enum::kRs1,
          [](uint64_t address, absl::string_view text,
-            ResolverInterface *resolver) -> absl::StatusOr<uint64_t> {
+            ResolverInterface* resolver) -> absl::StatusOr<uint64_t> {
            static ValueMap map(kRegisterList);
            auto iter = map.find(text);
            if (iter == map.end()) {
@@ -142,7 +142,7 @@
          });
   Insert(map, *Enum::kRs2,
          [](uint64_t address, absl::string_view text,
-            ResolverInterface *resolver) -> absl::StatusOr<uint64_t> {
+            ResolverInterface* resolver) -> absl::StatusOr<uint64_t> {
            static ValueMap map(kRegisterList);
            auto iter = map.find(text);
            if (iter == map.end()) {
@@ -153,14 +153,14 @@
          });
   Insert(map, *Enum::kSImm12,
          [](uint64_t address, absl::string_view text,
-            ResolverInterface *resolver) -> absl::StatusOr<uint64_t> {
+            ResolverInterface* resolver) -> absl::StatusOr<uint64_t> {
            auto res = SimpleTextToInt<uint32_t>(text, resolver);
            if (!res.ok()) return res.status();
            return Encoder::SType::InsertSImm(res.value(), 0ULL);
          });
   Insert(map, *Enum::kUImm20,
          [](uint64_t address, absl::string_view text,
-            ResolverInterface *resolver) -> absl::StatusOr<uint64_t> {
+            ResolverInterface* resolver) -> absl::StatusOr<uint64_t> {
            auto res = SimpleTextToInt<uint32_t>(text, resolver);
            if (!res.ok()) return res.status();
            return Encoder::UType::InsertUImm(res.value(), 0ULL);
@@ -168,10 +168,10 @@
 }
 
 template <typename Enum, typename Map, typename Encoder>
-void AddRiscvDestOpBinSetters(Map &map) {
+void AddRiscvDestOpBinSetters(Map& map) {
   Insert(map, *Enum::kRd,
          [](uint64_t address, absl::string_view text,
-            ResolverInterface *resolver) -> absl::StatusOr<uint64_t> {
+            ResolverInterface* resolver) -> absl::StatusOr<uint64_t> {
            static ValueMap map(kRegisterList);
            auto iter = map.find(text);
            if (iter == map.end()) {
@@ -185,25 +185,25 @@
 namespace internal {
 
 absl::Status RelocateAddiIImm12(uint64_t address, absl::string_view text,
-                                ResolverInterface *resolver,
-                                std::vector<RelocationInfo> &relocations);
+                                ResolverInterface* resolver,
+                                std::vector<RelocationInfo>& relocations);
 absl::Status RelocateJJImm20(uint64_t address, absl::string_view text,
-                             ResolverInterface *resolver,
-                             std::vector<RelocationInfo> &relocations);
+                             ResolverInterface* resolver,
+                             std::vector<RelocationInfo>& relocations);
 absl::Status RelocateJrJImm12(uint64_t address, absl::string_view text,
-                              ResolverInterface *resolver,
-                              std::vector<RelocationInfo> &relocations);
+                              ResolverInterface* resolver,
+                              std::vector<RelocationInfo>& relocations);
 absl::Status RelocateLuiUImm20(uint64_t address, absl::string_view text,
-                               ResolverInterface *resolver,
-                               std::vector<RelocationInfo> &relocations);
+                               ResolverInterface* resolver,
+                               std::vector<RelocationInfo>& relocations);
 absl::Status RelocateSdSImm12(uint64_t address, absl::string_view text,
-                              ResolverInterface *resolver,
-                              std::vector<RelocationInfo> &relocations);
+                              ResolverInterface* resolver,
+                              std::vector<RelocationInfo>& relocations);
 
 }  // namespace internal
 
 template <typename OpcodeEnum, typename SourceOpEnum, typename Map>
-void AddRiscvSourceOpRelocationSetters(Map &map) {
+void AddRiscvSourceOpRelocationSetters(Map& map) {
   Insert(map, OpcodeEnum::kAddi, SourceOpEnum::kIImm12,
          internal::RelocateAddiIImm12);
   Insert(map, OpcodeEnum::kJal, SourceOpEnum::kJImm20,
diff --git a/mpact/sim/util/asm/test/riscv_getter_helpers.h b/mpact/sim/util/asm/test/riscv_getter_helpers.h
index 5c37128..1ddde27 100644
--- a/mpact/sim/util/asm/test/riscv_getter_helpers.h
+++ b/mpact/sim/util/asm/test/riscv_getter_helpers.h
@@ -27,7 +27,7 @@
 // Helper function to insert and entry into a "getter" map. This is used in
 // the riscv_*_getter.h files.
 template <typename M, typename E, typename G>
-inline void Insert(M &map, E entry, G getter) {
+inline void Insert(M& map, E entry, G getter) {
   if (!map.contains(static_cast<int>(entry))) {
     map.insert(std::make_pair(static_cast<int>(entry), getter));
   } else {
@@ -36,7 +36,7 @@
 }
 
 template <typename M, typename E1, typename E2, typename G>
-inline void Insert(M &map, E1 entry1, E2 entry2, G getter) {
+inline void Insert(M& map, E1 entry1, E2 entry2, G getter) {
   auto key = std::tie(entry1, entry2);
   if (!map.contains(key)) {
     map.insert(std::make_pair(key, getter));
diff --git a/mpact/sim/util/memory/atomic_memory.cc b/mpact/sim/util/memory/atomic_memory.cc
index 1e2c589..b121477 100644
--- a/mpact/sim/util/memory/atomic_memory.cc
+++ b/mpact/sim/util/memory/atomic_memory.cc
@@ -14,10 +14,14 @@
 
 #include "mpact/sim/util/memory/atomic_memory.h"
 
-#include <cstring>
+#include <cstdint>
+#include <type_traits>
+#include <utility>
 
 #include "absl/log/log.h"
 #include "absl/status/status.h"
+#include "absl/strings/str_cat.h"
+#include "mpact/sim/util/memory/memory_interface.h"
 
 namespace mpact {
 namespace sim {
@@ -25,7 +29,7 @@
 
 // Helper function that writes the value to the data buffer.
 template <typename I>
-static absl::Status WriteDb(DataBuffer *db, I value) {
+static absl::Status WriteDb(DataBuffer* db, I value) {
   switch (db->size<uint8_t>()) {
     case 1:
       db->Set<uint8_t>(0, static_cast<uint8_t>(value));
@@ -50,8 +54,8 @@
 // buffers.
 template <typename T>
 static void PerformOp(AtomicMemoryOpInterface::Operation op,
-                      const DataBuffer *db_lhs, const DataBuffer *db_rhs,
-                      DataBuffer *db_res) {
+                      const DataBuffer* db_lhs, const DataBuffer* db_rhs,
+                      DataBuffer* db_res) {
   using UT = typename std::make_unsigned<T>::type;
   using ST = typename std::make_signed<T>::type;
   switch (op) {
@@ -89,7 +93,7 @@
 }
 
 // Constructor.
-AtomicMemory::AtomicMemory(MemoryInterface *memory) : memory_(memory) {
+AtomicMemory::AtomicMemory(MemoryInterface* memory) : memory_(memory) {
   // Construct and initialize the local data buffers.
   db1_ = db_factory_.Allocate<uint8_t>(1);
   db1_->set_latency(0);
@@ -114,20 +118,20 @@
 }
 
 // Forward the load call.
-void AtomicMemory::Load(uint64_t address, DataBuffer *db, Instruction *inst,
-                        ReferenceCount *context) {
+void AtomicMemory::Load(uint64_t address, DataBuffer* db, Instruction* inst,
+                        ReferenceCount* context) {
   memory_->Load(address, db, inst, context);
 }
 
 // Forward the load call.
-void AtomicMemory::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                        int el_size, DataBuffer *db, Instruction *inst,
-                        ReferenceCount *context) {
+void AtomicMemory::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                        int el_size, DataBuffer* db, Instruction* inst,
+                        ReferenceCount* context) {
   memory_->Load(address_db, mask_db, el_size, db, inst, context);
 }
 
 // Store the value to memory, but remove any matching tag from the tag set.
-void AtomicMemory::Store(uint64_t address, DataBuffer *db) {
+void AtomicMemory::Store(uint64_t address, DataBuffer* db) {
   // If the address matches a tag, remove the tag.
   auto ptr = ll_tag_set_.find(address >> kTagShift);
   if (ptr != ll_tag_set_.end()) {
@@ -137,8 +141,8 @@
 }
 
 // Store the value to memory, but remove any matching tag from the tag set.
-void AtomicMemory::Store(DataBuffer *address_db, DataBuffer *mask_db,
-                         int el_size, DataBuffer *db) {
+void AtomicMemory::Store(DataBuffer* address_db, DataBuffer* mask_db,
+                         int el_size, DataBuffer* db) {
   // If the address matches a tag, remove the tag.
   for (uint64_t address : address_db->Get<uint64_t>()) {
     auto ptr = ll_tag_set_.find(address >> kTagShift);
@@ -151,8 +155,8 @@
 
 // Perform the atomic memory operation.
 absl::Status AtomicMemory::PerformMemoryOp(uint64_t address, Operation op,
-                                           DataBuffer *db, Instruction *inst,
-                                           ReferenceCount *context) {
+                                           DataBuffer* db, Instruction* inst,
+                                           ReferenceCount* context) {
   int el_size = db->size<uint8_t>();
   db->set_latency(0);
   // Load-linked.
@@ -182,7 +186,7 @@
   }
 
   // Load the data from memory.
-  auto *tmp_db = GetDb(el_size);
+  auto* tmp_db = GetDb(el_size);
   if (tmp_db == nullptr)
     return absl::InternalError(
         absl::StrCat("Illegal element size (", el_size, ")"));
@@ -238,8 +242,8 @@
   return absl::OkStatus();
 }
 
-void AtomicMemory::WriteBack(Instruction *inst, ReferenceCount *context,
-                             DataBuffer *db) {
+void AtomicMemory::WriteBack(Instruction* inst, ReferenceCount* context,
+                             DataBuffer* db) {
   if (inst != nullptr) {
     if (db->latency() > 0) {
       inst->IncRef();
@@ -257,7 +261,7 @@
   }
 }
 
-DataBuffer *AtomicMemory::GetDb(int size) const {
+DataBuffer* AtomicMemory::GetDb(int size) const {
   switch (size) {
     case 1:
       return db1_;
diff --git a/mpact/sim/util/memory/atomic_memory.h b/mpact/sim/util/memory/atomic_memory.h
index 28d927d..1864787 100644
--- a/mpact/sim/util/memory/atomic_memory.h
+++ b/mpact/sim/util/memory/atomic_memory.h
@@ -15,7 +15,10 @@
 #ifndef MPACT_SIM_UTIL_MEMORY_ATOMIC_MEMORY_H_
 #define MPACT_SIM_UTIL_MEMORY_ATOMIC_MEMORY_H_
 
+#include <cstdint>
+
 #include "absl/container/flat_hash_set.h"
+#include "absl/status/status.h"
 #include "mpact/sim/generic/data_buffer.h"
 #include "mpact/sim/generic/instruction.h"
 #include "mpact/sim/generic/ref_count.h"
@@ -37,14 +40,14 @@
   using Operation = AtomicMemoryOpInterface::Operation;
 
   AtomicMemory() = delete;
-  explicit AtomicMemory(MemoryInterface *memory);
+  explicit AtomicMemory(MemoryInterface* memory);
   ~AtomicMemory() override;
 
   // Load data from address into the DataBuffer, then schedule the Instruction
   // inst (if not nullptr) to be executed (using the function delay line) with
   // context. The size of the data access is based on size of the data buffer.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Load data from N addresses stored in address_db (uint64), using mask_db
   // (bool) to mask out the corresponding loads from taking place (if false).
   // Each access is el_size bytes long, and is stored into the DataBuffer.
@@ -52,30 +55,30 @@
   // executed (using the function delay line) with context. It's the
   // responsibility of the caller to ensure that all DataBuffer instances passed
   // in are appropriately sized.
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Stores data from the DataBuffer instance to memory starting at address.
-  void Store(uint64_t address, DataBuffer *db) override;
+  void Store(uint64_t address, DataBuffer* db) override;
   // Stores data starting at each of the N addresses stored in address_db,
   // (uint64) using mask_db (bool) to mask out stores from taking place (if
   // false). Each store is el_size bytes long. It's the responsibility of the
   // caller to ensure that all DataBuffer instances that are passed in are
   // appropriately sized.
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override;
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override;
 
-  absl::Status PerformMemoryOp(uint64_t address, Operation op, DataBuffer *db,
-                               Instruction *inst,
-                               ReferenceCount *context) override;
+  absl::Status PerformMemoryOp(uint64_t address, Operation op, DataBuffer* db,
+                               Instruction* inst,
+                               ReferenceCount* context) override;
 
  private:
   static constexpr int kTagShift = 3;
   // Write back the result.
-  void WriteBack(Instruction *inst, ReferenceCount *context, DataBuffer *db);
+  void WriteBack(Instruction* inst, ReferenceCount* context, DataBuffer* db);
   // Returns the db of the given size.
-  DataBuffer *GetDb(int size) const;
-  MemoryInterface *memory_ = nullptr;
+  DataBuffer* GetDb(int size) const;
+  MemoryInterface* memory_ = nullptr;
   // Tag store for load linked operations. This is used to track if there is an
   // intervening store between the ll and the sc instruction. The addresses used
   // are the memory address shifted right by three. For byte addressable
@@ -83,10 +86,10 @@
   // and that the ll/sc tracking granule is 8 bytes.
   absl::flat_hash_set<uint64_t> ll_tag_set_;
   // Support accesses of 1 through 8 byte integer types.
-  DataBuffer *db1_;
-  DataBuffer *db2_;
-  DataBuffer *db4_;
-  DataBuffer *db8_;
+  DataBuffer* db1_;
+  DataBuffer* db2_;
+  DataBuffer* db4_;
+  DataBuffer* db8_;
   DataBufferFactory db_factory_;
 };
 
diff --git a/mpact/sim/util/memory/atomic_tagged_memory.cc b/mpact/sim/util/memory/atomic_tagged_memory.cc
index 6c649bb..9d43890 100644
--- a/mpact/sim/util/memory/atomic_tagged_memory.cc
+++ b/mpact/sim/util/memory/atomic_tagged_memory.cc
@@ -30,7 +30,7 @@
 
 // Helper function that writes the value to the data buffer.
 template <typename I>
-static absl::Status WriteDb(DataBuffer *db, I value) {
+static absl::Status WriteDb(DataBuffer* db, I value) {
   switch (db->size<uint8_t>()) {
     case 1:
       db->Set<uint8_t>(0, static_cast<uint8_t>(value));
@@ -55,8 +55,8 @@
 // buffers.
 template <typename T>
 static void PerformOp(AtomicMemoryOpInterface::Operation op,
-                      const DataBuffer *db_lhs, const DataBuffer *db_rhs,
-                      DataBuffer *db_res) {
+                      const DataBuffer* db_lhs, const DataBuffer* db_rhs,
+                      DataBuffer* db_res) {
   using UT = typename std::make_unsigned<T>::type;
   using ST = typename std::make_signed<T>::type;
   switch (op) {
@@ -94,7 +94,7 @@
 }
 
 // Constructor.
-AtomicTaggedMemory::AtomicTaggedMemory(TaggedMemoryInterface *tagged_memory)
+AtomicTaggedMemory::AtomicTaggedMemory(TaggedMemoryInterface* tagged_memory)
     : tagged_memory_(tagged_memory) {
   // Construct and initialize the local data buffers.
   db1_ = db_factory_.Allocate<uint8_t>(1);
@@ -120,27 +120,27 @@
 }
 
 // Forward the load call.
-void AtomicTaggedMemory::Load(uint64_t address, DataBuffer *db,
-                              DataBuffer *tag_db, Instruction *inst,
-                              ReferenceCount *context) {
+void AtomicTaggedMemory::Load(uint64_t address, DataBuffer* db,
+                              DataBuffer* tag_db, Instruction* inst,
+                              ReferenceCount* context) {
   tagged_memory_->Load(address, db, tag_db, inst, context);
 }
 
-void AtomicTaggedMemory::Load(uint64_t address, DataBuffer *db,
-                              Instruction *inst, ReferenceCount *context) {
+void AtomicTaggedMemory::Load(uint64_t address, DataBuffer* db,
+                              Instruction* inst, ReferenceCount* context) {
   tagged_memory_->Load(address, db, inst, context);
 }
 
 // Forward the load call.
-void AtomicTaggedMemory::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                              int el_size, DataBuffer *db, Instruction *inst,
-                              ReferenceCount *context) {
+void AtomicTaggedMemory::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                              int el_size, DataBuffer* db, Instruction* inst,
+                              ReferenceCount* context) {
   tagged_memory_->Load(address_db, mask_db, el_size, db, inst, context);
 }
 
 // Store the value to memory, but remove any matching tag from the tag set.
-void AtomicTaggedMemory::Store(uint64_t address, DataBuffer *db,
-                               DataBuffer *tag_db) {
+void AtomicTaggedMemory::Store(uint64_t address, DataBuffer* db,
+                               DataBuffer* tag_db) {
   // If the address matches a tag, remove the tag.
   auto ptr = ll_tag_set_.find(address >> kTagShift);
   if (ptr != ll_tag_set_.end()) {
@@ -150,7 +150,7 @@
 }
 
 // Store the value to memory, but remove any matching tag from the tag set.
-void AtomicTaggedMemory::Store(uint64_t address, DataBuffer *db) {
+void AtomicTaggedMemory::Store(uint64_t address, DataBuffer* db) {
   // If the address matches a tag, remove the tag.
   auto ptr = ll_tag_set_.find(address >> kTagShift);
   if (ptr != ll_tag_set_.end()) {
@@ -160,8 +160,8 @@
 }
 
 // Store the value to memory, but remove any matching tag from the tag set.
-void AtomicTaggedMemory::Store(DataBuffer *address_db, DataBuffer *mask_db,
-                               int el_size, DataBuffer *db) {
+void AtomicTaggedMemory::Store(DataBuffer* address_db, DataBuffer* mask_db,
+                               int el_size, DataBuffer* db) {
   // If the address matches a tag, remove the tag.
   for (uint64_t address : address_db->Get<uint64_t>()) {
     auto ptr = ll_tag_set_.find(address >> kTagShift);
@@ -174,9 +174,9 @@
 
 // Perform the atomic memory operation.
 absl::Status AtomicTaggedMemory::PerformMemoryOp(uint64_t address, Operation op,
-                                                 DataBuffer *db,
-                                                 Instruction *inst,
-                                                 ReferenceCount *context) {
+                                                 DataBuffer* db,
+                                                 Instruction* inst,
+                                                 ReferenceCount* context) {
   int el_size = db->size<uint8_t>();
   db->set_latency(0);
   // Load-linked.
@@ -206,7 +206,7 @@
   }
 
   // Load the data from memory.
-  auto *tmp_db = GetDb(el_size);
+  auto* tmp_db = GetDb(el_size);
   if (tmp_db == nullptr)
     return absl::InternalError(
         absl::StrCat("Illegal element size (", el_size, ")"));
@@ -262,8 +262,8 @@
   return absl::OkStatus();
 }
 
-void AtomicTaggedMemory::WriteBack(Instruction *inst, ReferenceCount *context,
-                                   DataBuffer *db) {
+void AtomicTaggedMemory::WriteBack(Instruction* inst, ReferenceCount* context,
+                                   DataBuffer* db) {
   if (inst != nullptr) {
     if (db->latency() > 0) {
       inst->IncRef();
@@ -281,7 +281,7 @@
   }
 }
 
-DataBuffer *AtomicTaggedMemory::GetDb(int size) const {
+DataBuffer* AtomicTaggedMemory::GetDb(int size) const {
   switch (size) {
     case 1:
       return db1_;
diff --git a/mpact/sim/util/memory/atomic_tagged_memory.h b/mpact/sim/util/memory/atomic_tagged_memory.h
index 455d1fd..5090bf2 100644
--- a/mpact/sim/util/memory/atomic_tagged_memory.h
+++ b/mpact/sim/util/memory/atomic_tagged_memory.h
@@ -42,16 +42,16 @@
   using Operation = AtomicMemoryOpInterface::Operation;
 
   AtomicTaggedMemory() = delete;
-  explicit AtomicTaggedMemory(TaggedMemoryInterface *tagged_memory);
+  explicit AtomicTaggedMemory(TaggedMemoryInterface* tagged_memory);
   ~AtomicTaggedMemory() override;
 
   // Load data from address into the DataBuffer, then schedule the Instruction
   // inst (if not nullptr) to be executed (using the function delay line) with
   // context. The size of the data access is based on size of the data buffer.
-  void Load(uint64_t address, DataBuffer *db, DataBuffer *tag_db,
-            Instruction *inst, ReferenceCount *context) override;
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(uint64_t address, DataBuffer* db, DataBuffer* tag_db,
+            Instruction* inst, ReferenceCount* context) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Load data from N addresses stored in address_db (uint64), using mask_db
   // (bool) to mask out the corresponding loads from taking place (if false).
   // Each access is el_size bytes long, and is stored into the DataBuffer.
@@ -59,32 +59,32 @@
   // executed (using the function delay line) with context. It's the
   // responsibility of the caller to ensure that all DataBuffer instances passed
   // in are appropriately sized.
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Stores data from the DataBuffer instance to memory starting at address.
-  void Store(uint64_t address, DataBuffer *db, DataBuffer *tag_db) override;
+  void Store(uint64_t address, DataBuffer* db, DataBuffer* tag_db) override;
   // Stores data from the DataBuffer instance to memory starting at address.
-  void Store(uint64_t address, DataBuffer *db) override;
+  void Store(uint64_t address, DataBuffer* db) override;
   // Stores data starting at each of the N addresses stored in address_db,
   // (uint64) using mask_db (bool) to mask out stores from taking place (if
   // false). Each store is el_size bytes long. It's the responsibility of the
   // caller to ensure that all DataBuffer instances that are passed in are
   // appropriately sized.
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override;
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override;
 
-  absl::Status PerformMemoryOp(uint64_t address, Operation op, DataBuffer *db,
-                               Instruction *inst,
-                               ReferenceCount *context) override;
+  absl::Status PerformMemoryOp(uint64_t address, Operation op, DataBuffer* db,
+                               Instruction* inst,
+                               ReferenceCount* context) override;
 
  private:
   static constexpr int kTagShift = 3;
   // Write back the result.
-  void WriteBack(Instruction *inst, ReferenceCount *context, DataBuffer *db);
+  void WriteBack(Instruction* inst, ReferenceCount* context, DataBuffer* db);
   // Returns the db of the given size.
-  DataBuffer *GetDb(int size) const;
-  TaggedMemoryInterface *tagged_memory_ = nullptr;
+  DataBuffer* GetDb(int size) const;
+  TaggedMemoryInterface* tagged_memory_ = nullptr;
   // Tag store for load linked operations. This is used to track if there is an
   // intervening store between the ll and the sc instruction. The addresses used
   // are the memory address shifted right by three. For byte addressable
@@ -92,10 +92,10 @@
   // and that the ll/sc tracking granule is 8 bytes.
   absl::flat_hash_set<uint64_t> ll_tag_set_;
   // Support accesses of 1 through 8 byte integer types.
-  DataBuffer *db1_;
-  DataBuffer *db2_;
-  DataBuffer *db4_;
-  DataBuffer *db8_;
+  DataBuffer* db1_;
+  DataBuffer* db2_;
+  DataBuffer* db4_;
+  DataBuffer* db8_;
   DataBufferFactory db_factory_;
 };
 
diff --git a/mpact/sim/util/memory/cache.cc b/mpact/sim/util/memory/cache.cc
index defa1b3..8f36b63 100644
--- a/mpact/sim/util/memory/cache.cc
+++ b/mpact/sim/util/memory/cache.cc
@@ -39,7 +39,7 @@
 using ::mpact::sim::generic::Component;
 
 // Constructors.
-Cache::Cache(std::string name, Component *parent, MemoryInterface *memory)
+Cache::Cache(std::string name, Component* parent, MemoryInterface* memory)
     : Component(name, parent),
       read_hit_counter_("read_hit", 0ULL),
       read_miss_counter_("read_miss", 0ULL),
@@ -66,8 +66,8 @@
   cache_inst_->set_semantic_function(absl::bind_front(&Cache::LoadChild, this));
 }
 
-Cache::Cache(std::string name, Component *parent,
-             TaggedMemoryInterface *tagged_memory)
+Cache::Cache(std::string name, Component* parent,
+             TaggedMemoryInterface* tagged_memory)
     : Component(name, parent),
       read_hit_counter_("read_hit", 0ULL),
       read_miss_counter_("read_miss", 0ULL),
@@ -93,25 +93,25 @@
 }
 
 // The simple constructors just call the main constructors.
-Cache::Cache(std::string name, MemoryInterface *memory)
+Cache::Cache(std::string name, MemoryInterface* memory)
     : Cache(name, nullptr, memory) {}
 
-Cache::Cache(std::string name, TaggedMemoryInterface *tagged_memory)
+Cache::Cache(std::string name, TaggedMemoryInterface* tagged_memory)
     : Cache(name, nullptr, tagged_memory) {}
 
-Cache::Cache(std::string name, Component *parent)
-    : Cache(name, parent, static_cast<MemoryInterface *>(nullptr)) {}
+Cache::Cache(std::string name, Component* parent)
+    : Cache(name, parent, static_cast<MemoryInterface*>(nullptr)) {}
 
 Cache::Cache(std::string name)
-    : Cache(name, static_cast<Component *>(nullptr)) {}
+    : Cache(name, static_cast<Component*>(nullptr)) {}
 
 Cache::~Cache() {
   delete[] cache_lines_;
   cache_inst_->DecRef();
 }
 
-absl::Status Cache::Configure(const std::string &config,
-                              CounterValueOutputBase<uint64_t> *cycle_counter) {
+absl::Status Cache::Configure(const std::string& config,
+                              CounterValueOutputBase<uint64_t>* cycle_counter) {
   if (cycle_counter == nullptr) {
     return absl::InvalidArgumentError("Cycle counter is null");
   }
@@ -239,13 +239,13 @@
 // the method will call the ReplaceBlock method to replace the block in the
 // cache. The memory request itself will be forwarded to the memory interface
 // provided to the constructor (if not nullptr).
-void Cache::Load(uint64_t address, DataBuffer *db, Instruction *inst,
-                 ReferenceCount *context) {
+void Cache::Load(uint64_t address, DataBuffer* db, Instruction* inst,
+                 ReferenceCount* context) {
   (void)CacheLookup(address, db->size<uint8_t>(), /*is_read=*/true);
 
   if (memory_ == nullptr) return;
 
-  auto *cache_context = new CacheContext(context, db, inst, db->latency());
+  auto* cache_context = new CacheContext(context, db, inst, db->latency());
   if (context) context->IncRef();
   if (inst) inst->IncRef();
   db->IncRef();
@@ -254,8 +254,8 @@
   cache_context->DecRef();
 }
 
-void Cache::Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-                 DataBuffer *db, Instruction *inst, ReferenceCount *context) {
+void Cache::Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+                 DataBuffer* db, Instruction* inst, ReferenceCount* context) {
   auto address_span = address_db->Get<uint64_t>();
   auto mask_span = mask_db->Get<bool>();
   for (int i = 0; i < address_db->size<uint64_t>(); i++) {
@@ -265,7 +265,7 @@
   }
   if (memory_ == nullptr) return;
 
-  auto *cache_context = new CacheContext(context, db, inst, db->latency());
+  auto* cache_context = new CacheContext(context, db, inst, db->latency());
   if (context) context->IncRef();
   if (inst) inst->IncRef();
   db->IncRef();
@@ -274,8 +274,8 @@
   cache_context->DecRef();
 }
 
-void Cache::Load(uint64_t address, DataBuffer *db, DataBuffer *tags,
-                 Instruction *inst, ReferenceCount *context) {
+void Cache::Load(uint64_t address, DataBuffer* db, DataBuffer* tags,
+                 Instruction* inst, ReferenceCount* context) {
   // Since db can be nullptr (for a tag only load), the size and latency may
   // have to be computed differently. For size, base it on the number of tags
   // that are being loaded. For latency, use 0.
@@ -296,7 +296,7 @@
     return;
   }
 
-  auto *cache_context = new CacheContext(context, db, inst, latency);
+  auto* cache_context = new CacheContext(context, db, inst, latency);
   if (context) context->IncRef();
   if (inst) inst->IncRef();
   if (db) {
@@ -307,15 +307,15 @@
   cache_context->DecRef();
 }
 
-void Cache::Store(uint64_t address, DataBuffer *db) {
+void Cache::Store(uint64_t address, DataBuffer* db) {
   (void)CacheLookup(address, db->size<uint8_t>(), /*is_read=*/false);
   if (memory_ == nullptr) return;
 
   memory_->Store(address, db);
 }
 
-void Cache::Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-                  DataBuffer *db) {
+void Cache::Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+                  DataBuffer* db) {
   auto address_span = address_db->Get<uint64_t>();
   auto mask_span = mask_db->Get<bool>();
   for (int i = 0; i < address_db->size<uint64_t>(); i++) {
@@ -328,7 +328,7 @@
   memory_->Store(address_db, mask_db, el_size, db);
 }
 
-void Cache::Store(uint64_t address, DataBuffer *db, DataBuffer *tags) {
+void Cache::Store(uint64_t address, DataBuffer* db, DataBuffer* tags) {
   (void)CacheLookup(address, db->size<uint8_t>(), /*is_read=*/false);
   if (tagged_memory_ == nullptr) return;
 
@@ -338,11 +338,11 @@
 // This is the semantic function that is bound to the cache_inst_ instruction
 // and is used to perform the writeback to the processor of the data that was
 // read.
-void Cache::LoadChild(const Instruction *inst) {
-  auto *cache_context = static_cast<CacheContext *>(inst->context());
-  auto *og_context = cache_context->context;
-  auto *db = cache_context->db;
-  auto *og_inst = cache_context->inst;
+void Cache::LoadChild(const Instruction* inst) {
+  auto* cache_context = static_cast<CacheContext*>(inst->context());
+  auto* og_context = cache_context->context;
+  auto* db = cache_context->db;
+  auto* og_inst = cache_context->inst;
   // Reset the db latency to the original value.
   if (nullptr != og_inst) {
     if (cache_context->latency > 0) {
@@ -393,7 +393,7 @@
     bool hit = false;
     // Iterate over the number of sets in the cache.
     for (int set = 0; set < num_sets_; set++) {
-      CacheLine &line = cache_lines_[index + set];
+      CacheLine& line = cache_lines_[index + set];
       if (line.valid && line.tag == block) {
         hit = true;
         line.lru = cycle_counter_->GetValue();
@@ -432,7 +432,7 @@
   int victim = -1;
   uint64_t victim_lru = std::numeric_limits<uint64_t>::max();
   for (int set = 0; set < num_sets_; set++) {
-    CacheLine &line = cache_lines_[index + set];
+    CacheLine& line = cache_lines_[index + set];
     // If the line is invalid, use it as the victim.
     if (!line.valid) {
       victim = index + set;
@@ -458,7 +458,7 @@
     return;
   }
   // Perform the replacement on the victim.
-  CacheLine &line = cache_lines_[victim];
+  CacheLine& line = cache_lines_[victim];
   // If the line is dirty (and valid), count the writeback.
   if (line.valid && line.dirty) {
     dirty_line_writeback_counter_.Increment(1ULL);
diff --git a/mpact/sim/util/memory/cache.h b/mpact/sim/util/memory/cache.h
index af2e11b..711a844 100644
--- a/mpact/sim/util/memory/cache.h
+++ b/mpact/sim/util/memory/cache.h
@@ -67,16 +67,16 @@
   // the memory request when it's forwarded on to the memory interface.
   struct CacheContext : public ReferenceCount {
     // The context of the original memory reference.
-    ReferenceCount *context;
+    ReferenceCount* context;
     // Original data buffer.
-    DataBuffer *db;
+    DataBuffer* db;
     // Instruction to be executed upon memory access completion.
-    Instruction *inst;
+    Instruction* inst;
     // Latency of the memory access.
     int latency;
     // Two constructors depending on whether the cache is used with a tagged
     // memory interface or not.
-    CacheContext(ReferenceCount *context_, DataBuffer *db_, Instruction *inst_,
+    CacheContext(ReferenceCount* context_, DataBuffer* db_, Instruction* inst_,
                  int latency_)
         : context(context_), db(db_), inst(inst_), latency(latency_) {}
   };
@@ -86,17 +86,17 @@
   // to use for the cache, a pointer to the parent component (used to register
   // and provide access to the performance counters), and a memory interface
   // used to forward memory requests to.
-  Cache(std::string name, Component *parent, MemoryInterface *memory);
-  Cache(std::string name, Component *parent,
-        TaggedMemoryInterface *tagged_memory);
+  Cache(std::string name, Component* parent, MemoryInterface* memory);
+  Cache(std::string name, Component* parent,
+        TaggedMemoryInterface* tagged_memory);
   // Shorthand constructors that omit some parameters.
-  Cache(std::string name, MemoryInterface *memory);
-  Cache(std::string name, TaggedMemoryInterface *tagged_memory);
-  Cache(std::string name, Component *parent);
+  Cache(std::string name, MemoryInterface* memory);
+  Cache(std::string name, TaggedMemoryInterface* tagged_memory);
+  Cache(std::string name, Component* parent);
   explicit Cache(std::string name);
   Cache() = delete;
-  Cache(const Cache &) = delete;
-  Cache operator=(const Cache &) = delete;
+  Cache(const Cache&) = delete;
+  Cache operator=(const Cache&) = delete;
   ~Cache() override;
 
   // Configure the cache. The configuration string is expected to be in the
@@ -114,29 +114,29 @@
   //
   // cycle_counter is a pointer to a counter that counts cycles in the
   // simulation.
-  absl::Status Configure(const std::string &config,
-                         CounterValueOutputBase<uint64_t> *cycle_counter);
+  absl::Status Configure(const std::string& config,
+                         CounterValueOutputBase<uint64_t>* cycle_counter);
 
   // MemoryInterface and TaggedMemoryInterfacemethods.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Load(uint64_t address, DataBuffer *db, DataBuffer *tags,
-            Instruction *inst, ReferenceCount *context) override;
-  void Store(uint64_t address, DataBuffer *db) override;
-  void Store(DataBuffer *address, DataBuffer *mask, int el_size,
-             DataBuffer *db) override;
-  void Store(uint64_t address, DataBuffer *db, DataBuffer *tags) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Load(uint64_t address, DataBuffer* db, DataBuffer* tags,
+            Instruction* inst, ReferenceCount* context) override;
+  void Store(uint64_t address, DataBuffer* db) override;
+  void Store(DataBuffer* address, DataBuffer* mask, int el_size,
+             DataBuffer* db) override;
+  void Store(uint64_t address, DataBuffer* db, DataBuffer* tags) override;
   // Setters for the memory interfaces.
-  void set_memory(MemoryInterface *memory) {
+  void set_memory(MemoryInterface* memory) {
     memory_ = memory;
     tagged_memory_ = nullptr;
   }
-  void set_tagged_memory(TaggedMemoryInterface *tagged_memory) {
+  void set_tagged_memory(TaggedMemoryInterface* tagged_memory) {
     tagged_memory_ = tagged_memory;
-    memory_ = static_cast<MemoryInterface *>(tagged_memory);
+    memory_ = static_cast<MemoryInterface*>(tagged_memory);
   }
 
  private:
@@ -155,8 +155,8 @@
   // of the second. Thus if neither is less than the other, they overlap in
   // in some way.
   struct AddressRangeLess {
-    constexpr bool operator()(const AddressRange &lhs,
-                              const AddressRange &rhs) const {
+    constexpr bool operator()(const AddressRange& lhs,
+                              const AddressRange& rhs) const {
       return lhs.end < rhs.start;
     }
   };
@@ -178,12 +178,12 @@
   // This is a semantic function that is bound to a local instruction instance
   // and is used to perform the writeback to the processor of the data that was
   // read.
-  void LoadChild(const Instruction *inst);
+  void LoadChild(const Instruction* inst);
   // Cache read/write function. Returns the number of cache misses.
   int CacheLookup(uint64_t address, int size, bool is_read);
   void ReplaceBlock(uint64_t block, bool is_read);
   // The cache.
-  CacheLine *cache_lines_ = nullptr;
+  CacheLine* cache_lines_ = nullptr;
   // Shift amounts and mask used to compute the index from the address.
   int block_shift_ = 0;
   int set_shift_ = 0;
@@ -197,8 +197,8 @@
   bool has_non_cacheable_ = false;
   bool has_cacheable_ = false;
   // Instruction object used to perform the writeback to the processor.
-  Instruction *cache_inst_;
-  CounterValueOutputBase<uint64_t> *cycle_counter_;
+  Instruction* cache_inst_;
+  CounterValueOutputBase<uint64_t>* cycle_counter_;
   // Performance counters.
   SimpleCounter<uint64_t> read_hit_counter_;
   SimpleCounter<uint64_t> read_miss_counter_;
@@ -210,8 +210,8 @@
   SimpleCounter<uint64_t> read_non_cacheable_counter_;
   SimpleCounter<uint64_t> write_non_cacheable_counter_;
   // Memory interface pointers.
-  MemoryInterface *memory_;
-  TaggedMemoryInterface *tagged_memory_;
+  MemoryInterface* memory_;
+  TaggedMemoryInterface* tagged_memory_;
 };
 
 }  // namespace mpact::sim::util
diff --git a/mpact/sim/util/memory/flat_demand_memory.cc b/mpact/sim/util/memory/flat_demand_memory.cc
index 8107668..e026de7 100644
--- a/mpact/sim/util/memory/flat_demand_memory.cc
+++ b/mpact/sim/util/memory/flat_demand_memory.cc
@@ -43,13 +43,13 @@
 // Delete all the allocated blocks.
 FlatDemandMemory::~FlatDemandMemory() { Clear(); }
 
-void FlatDemandMemory::Load(uint64_t address, DataBuffer *db, Instruction *inst,
-                            ReferenceCount *context) {
+void FlatDemandMemory::Load(uint64_t address, DataBuffer* db, Instruction* inst,
+                            ReferenceCount* context) {
   int size_in_units = db->size<uint8_t>() >> addressable_unit_shift_;
   uint64_t high = address + size_in_units;
   ABSL_HARDENING_ASSERT((address >= base_address_) && (high <= max_address_));
   ABSL_HARDENING_ASSERT(size_in_units > 0);
-  uint8_t *byte_ptr = static_cast<uint8_t *>(db->raw_ptr());
+  uint8_t* byte_ptr = static_cast<uint8_t*>(db->raw_ptr());
   // Load the data into the data buffer.
   LoadStoreHelper(address, byte_ptr, size_in_units, true);
   // Execute the instruction to process and write back the load data.
@@ -70,12 +70,12 @@
   }
 }
 
-void FlatDemandMemory::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                            int el_size, DataBuffer *db, Instruction *inst,
-                            ReferenceCount *context) {
+void FlatDemandMemory::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                            int el_size, DataBuffer* db, Instruction* inst,
+                            ReferenceCount* context) {
   auto mask_span = mask_db->Get<bool>();
   auto address_span = address_db->Get<uint64_t>();
-  uint8_t *byte_ptr = static_cast<uint8_t *>(db->raw_ptr());
+  uint8_t* byte_ptr = static_cast<uint8_t*>(db->raw_ptr());
   int size_in_units = el_size >> addressable_unit_shift_;
   ABSL_HARDENING_ASSERT(size_in_units > 0);
   // This is either a gather load, or a unit stride load depending on size of
@@ -106,20 +106,20 @@
   }
 }
 
-void FlatDemandMemory::Store(uint64_t address, DataBuffer *db) {
+void FlatDemandMemory::Store(uint64_t address, DataBuffer* db) {
   int size_in_units = db->size<uint8_t>() >> addressable_unit_shift_;
   uint64_t high = address + size_in_units;
   ABSL_HARDENING_ASSERT((address >= base_address_) && (high <= max_address_));
   ABSL_HARDENING_ASSERT(size_in_units > 0);
-  uint8_t *byte_ptr = static_cast<uint8_t *>(db->raw_ptr());
+  uint8_t* byte_ptr = static_cast<uint8_t*>(db->raw_ptr());
   LoadStoreHelper(address, byte_ptr, size_in_units, /*is_load*/ false);
 }
 
-void FlatDemandMemory::Store(DataBuffer *address_db, DataBuffer *mask_db,
-                             int el_size, DataBuffer *db) {
+void FlatDemandMemory::Store(DataBuffer* address_db, DataBuffer* mask_db,
+                             int el_size, DataBuffer* db) {
   auto mask_span = mask_db->Get<bool>();
   auto address_span = address_db->Get<uint64_t>();
-  uint8_t *byte_ptr = static_cast<uint8_t *>(db->raw_ptr());
+  uint8_t* byte_ptr = static_cast<uint8_t*>(db->raw_ptr());
   int size_in_units = el_size >> addressable_unit_shift_;
   ABSL_HARDENING_ASSERT(size_in_units > 0);
   // If the address_span.size() > 1, then this is a scatter store, otherwise
@@ -136,7 +136,7 @@
   }
 }
 
-void FlatDemandMemory::LoadStoreHelper(uint64_t address, uint8_t *data_ptr,
+void FlatDemandMemory::LoadStoreHelper(uint64_t address, uint8_t* data_ptr,
                                        int size_in_units, bool is_load) {
   // Repeat the following while there is data to copy. If it's a big chunk of
   // data it may span across more than one block.
@@ -145,7 +145,7 @@
     uint64_t block_address = address >> kAllocationShift;
     auto iter = block_map_.find(block_address);
 
-    uint8_t *block;
+    uint8_t* block;
     if (iter == block_map_.end()) {
       block = new uint8_t[allocation_byte_size_];
       block_map_.insert(std::make_pair(block_address, block));
@@ -180,7 +180,7 @@
 }
 
 void FlatDemandMemory::Clear() {
-  for (auto &[unused, block_ptr] : block_map_) {
+  for (auto& [unused, block_ptr] : block_map_) {
     delete[] block_ptr;
   }
   block_map_.clear();
diff --git a/mpact/sim/util/memory/flat_demand_memory.h b/mpact/sim/util/memory/flat_demand_memory.h
index f583a2f..982e908 100644
--- a/mpact/sim/util/memory/flat_demand_memory.h
+++ b/mpact/sim/util/memory/flat_demand_memory.h
@@ -51,8 +51,8 @@
   // Load data from address into the DataBuffer, then schedule the Instruction
   // inst (if not nullptr) to be executed (using the function delay line) with
   // context. The size of the data access is based on size of the data buffer.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Load data from N addresses stored in address_db (uint64), using mask_db
   // (bool) to mask out the corresponding loads from taking place (if false).
   // Each access is el_size bytes long, and is stored into the DataBuffer.
@@ -60,29 +60,29 @@
   // executed (using the function delay line) with context. It's the
   // responsibility of the caller to ensure that all DataBuffer instances passed
   // in are appropriately sized.
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Convenience template function that calls the above function with the
   // element size as the sizeof() the template parameter type.
   template <typename T>
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, DataBuffer *db,
-            Instruction *inst, ReferenceCount *context) {
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, DataBuffer* db,
+            Instruction* inst, ReferenceCount* context) {
     Load(address_db, mask_db, sizeof(T), db, inst, context);
   }
   // Stores data from the DataBuffer instance to memory starting at address.
-  void Store(uint64_t address, DataBuffer *db) override;
+  void Store(uint64_t address, DataBuffer* db) override;
   // Stores data starting at each of the N addresses stored in address_db,
   // (uint64) using mask_db (bool) to mask out stores from taking place (if
   // false). Each store is el_size bytes long. It's the responsibility of the
   // caller to ensure that all DataBuffer instances that are passed in are
   // appropriately sized.
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override;
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override;
   // Convenience template function that calls the above function with the
   // element size as the sizeof() the template parameter type.
   template <typename T>
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, DataBuffer *db) {
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, DataBuffer* db) {
     Store(address_db, mask_db, sizeof(T), db);
   }
   static constexpr int kAllocationSize = 16 * 1024;  // Power of two.
@@ -91,7 +91,7 @@
   void Clear();
 
  private:
-  void LoadStoreHelper(uint64_t address, uint8_t *data_ptr, int size_in_units,
+  void LoadStoreHelper(uint64_t address, uint8_t* data_ptr, int size_in_units,
                        bool is_load);
 
   static constexpr int kAllocationShift = 14;
@@ -101,7 +101,7 @@
   uint8_t fill_value_;
   int addressable_unit_shift_;
   int allocation_byte_size_;
-  absl::flat_hash_map<uint64_t, uint8_t *> block_map_;
+  absl::flat_hash_map<uint64_t, uint8_t*> block_map_;
 };
 
 }  // namespace util
diff --git a/mpact/sim/util/memory/flat_memory.cc b/mpact/sim/util/memory/flat_memory.cc
index 95cfd19..a3ceee6 100644
--- a/mpact/sim/util/memory/flat_memory.cc
+++ b/mpact/sim/util/memory/flat_memory.cc
@@ -15,7 +15,7 @@
 #include "mpact/sim/util/memory/flat_memory.h"
 
 #include <cstdint>
-#include <functional>
+#include <cstring>
 
 #include "absl/base/macros.h"
 #include "absl/numeric/bits.h"
@@ -24,12 +24,12 @@
 namespace sim {
 namespace util {
 
-void FlatMemory::Load(uint64_t address, DataBuffer *db, Instruction *inst,
-                      ReferenceCount *context) {
+void FlatMemory::Load(uint64_t address, DataBuffer* db, Instruction* inst,
+                      ReferenceCount* context) {
   ABSL_HARDENING_ASSERT(address >= base_);
   uint64_t offset = (address - base_) << shift_;
   ABSL_HARDENING_ASSERT(offset + db->size<uint8_t>() <= size_);
-  uint8_t *ptr = &memory_buffer_[offset];
+  uint8_t* ptr = &memory_buffer_[offset];
   db->CopyFrom(ptr);
   if (nullptr != inst) {
     if (db->latency() > 0) {
@@ -48,9 +48,9 @@
   }
 }
 
-void FlatMemory::Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-                      DataBuffer *db, Instruction *inst,
-                      ReferenceCount *context) {
+void FlatMemory::Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+                      DataBuffer* db, Instruction* inst,
+                      ReferenceCount* context) {
   int max = mask_db->size<bool>();
   switch (el_size) {
     case 1:
@@ -87,16 +87,16 @@
   }
 }
 
-void FlatMemory::Store(uint64_t address, DataBuffer *db) {
+void FlatMemory::Store(uint64_t address, DataBuffer* db) {
   ABSL_HARDENING_ASSERT(address >= base_);
   uint64_t offset = (address - base_) << shift_;
   ABSL_HARDENING_ASSERT(offset + db->size<uint8_t>() <= size_);
-  uint8_t *ptr = &memory_buffer_[offset];
+  uint8_t* ptr = &memory_buffer_[offset];
   db->CopyTo(ptr);
 }
 
-void FlatMemory::Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-                       DataBuffer *db) {
+void FlatMemory::Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+                       DataBuffer* db) {
   int max = mask_db->size<bool>();
 
   switch (el_size) {
diff --git a/mpact/sim/util/memory/flat_memory.h b/mpact/sim/util/memory/flat_memory.h
index b6b48de..b51c3d8 100644
--- a/mpact/sim/util/memory/flat_memory.h
+++ b/mpact/sim/util/memory/flat_memory.h
@@ -54,8 +54,8 @@
   // Load a DataBuffer instance db from a single address, calling the Execute
   // method of inst (if inst is not equal to nullptr) with context when the data
   // has been written to db.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Load a DataBuffer instance db with el_size sized memory accesses using the
   // addresses stored in the address_db DataBuffer instance subject to the
   // masking of the boolean masks stored in the mask_db DataBuffer instance.
@@ -64,20 +64,20 @@
   // sizeof(uint64), mask_db  sizeof(bool), and db is el_size. Once the data has
   // been written to db, the Execute method of inst is called (if inst is not
   // equal to nullptr) with the given context.
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Convenience template function that calls the above function with the
   // element size as the sizeof() the template parameter type.
   template <typename T>
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, DataBuffer *db,
-            Instruction *inst, ReferenceCount *context) {
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, DataBuffer* db,
+            Instruction* inst, ReferenceCount* context) {
     Load(address_db, mask_db, sizeof(T), db, inst, context);
   }
 
   // Store the contents of the DataBuffer instance db to memory starting at the
   // given address.
-  void Store(uint64_t address, DataBuffer *db) override;
+  void Store(uint64_t address, DataBuffer* db) override;
   // Store the contents of the DataBuffer instance db to memory with el_size
   // sized accesses based using the addresses stored in the address_db
   // DataBuffer instance subject to the masking of the boolean masks stored in
@@ -86,12 +86,12 @@
   // the element sizes vary (thus the overall byte size of the DataBuffer
   // instances vary). The elements sizes are: address_db sizeof(uint64), mask_db
   // sizeof(bool), and db is el_size.
-  void Store(DataBuffer *address, DataBuffer *mask, int el_size,
-             DataBuffer *db) override;
+  void Store(DataBuffer* address, DataBuffer* mask, int el_size,
+             DataBuffer* db) override;
   // Convenience template function that calls the above function with the
   // element size as the sizeof() the template parameter type.
   template <typename T>
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, DataBuffer *db) {
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, DataBuffer* db) {
     Store(address_db, mask_db, sizeof(T), db);
   }
 
@@ -104,8 +104,8 @@
   // Private helper function used for copying data from memory to the
   // databuffer for the vector gather load.
   template <typename T>
-  void LoadData(const DataBuffer *address_db, const DataBuffer *mask_db,
-                int max, DataBuffer *db) {
+  void LoadData(const DataBuffer* address_db, const DataBuffer* mask_db,
+                int max, DataBuffer* db) {
     auto masks = mask_db->Get<bool>();
     auto addresses = address_db->Get<uint64_t>();
     bool gather = addresses.size() > 1;
@@ -116,7 +116,7 @@
         ABSL_HARDENING_ASSERT(address >= base_);
         uint64_t offset = (address - base_) << shift_;
         ABSL_HARDENING_ASSERT(offset + sizeof(T) <= size_);
-        db->Set<T>(entry, *reinterpret_cast<T *>(&memory_buffer_[offset]));
+        db->Set<T>(entry, *reinterpret_cast<T*>(&memory_buffer_[offset]));
       }
     }
   }
@@ -124,8 +124,8 @@
   // Private helper function used for copying data from the databuffer to
   // memory for the vector scatter store.
   template <typename T>
-  void StoreData(const DataBuffer *address_db, const DataBuffer *mask_db,
-                 int max, const DataBuffer *db) {
+  void StoreData(const DataBuffer* address_db, const DataBuffer* mask_db,
+                 int max, const DataBuffer* db) {
     auto masks = mask_db->Get<bool>();
     auto addresses = address_db->Get<uint64_t>();
     bool gather = addresses.size() > 1;
@@ -136,14 +136,14 @@
         ABSL_HARDENING_ASSERT(address >= base_);
         uint64_t offset = (address - base_) << shift_;
         ABSL_HARDENING_ASSERT(offset + sizeof(T) <= size_);
-        *reinterpret_cast<T *>(&memory_buffer_[offset]) = db->Get<T>(entry);
+        *reinterpret_cast<T*>(&memory_buffer_[offset]) = db->Get<T>(entry);
       }
     }
   }
   int64_t size_;
   uint64_t base_;
   int shift_;
-  uint8_t *memory_buffer_;
+  uint8_t* memory_buffer_;
 };
 
 }  // namespace util
diff --git a/mpact/sim/util/memory/memory_interface.h b/mpact/sim/util/memory/memory_interface.h
index 6d75548..028f20a 100644
--- a/mpact/sim/util/memory/memory_interface.h
+++ b/mpact/sim/util/memory/memory_interface.h
@@ -49,8 +49,8 @@
   // Load data from address into the DataBuffer, then schedule the Instruction
   // inst (if not nullptr) to be executed (using the function delay line) with
   // context. The size of the data access is based on size of the data buffer.
-  virtual void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-                    ReferenceCount *context) = 0;
+  virtual void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+                    ReferenceCount* context) = 0;
   // Load data from 1 or N addresses stored in address_db (uint64), using
   // mask_db (bool) to mask out the corresponding loads from taking place (if
   // false). Each access is el_size bytes long, and is stored into the
@@ -60,19 +60,19 @@
   // in are appropriately sized. Use the DataBuffer size<uint64_t> to determine
   // the number of addresses availalble. The following summarizes the parameter
   // requirements:
-  virtual void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-                    DataBuffer *db, Instruction *inst,
-                    ReferenceCount *context) = 0;
+  virtual void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+                    DataBuffer* db, Instruction* inst,
+                    ReferenceCount* context) = 0;
   // Convenience template function that calls the above function with the
   // element size as the sizeof() the template parameter type.
   template <typename T>
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, DataBuffer *db,
-            Instruction *inst, ReferenceCount *context) {
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, DataBuffer* db,
+            Instruction* inst, ReferenceCount* context) {
     Load(address_db, mask_db, sizeof(T), db, inst, context);
   }
 
   // Stores data from the DataBuffer instance to memory starting at address.
-  virtual void Store(uint64_t address, DataBuffer *db) = 0;
+  virtual void Store(uint64_t address, DataBuffer* db) = 0;
   // Stores data starting at each of the 1 or N addresses stored in address_db,
   // (uint64) using mask_db (bool) to mask out stores from taking place (if
   // false). Each store is el_size bytes long. It's the responsibility of the
@@ -82,12 +82,12 @@
   //   address_db->size<uint64_t>)() is either 1 or N
   //   mask_db->size<bool>() is N
   //   db->size<uint8_t>()/el_size = N.
-  virtual void Store(DataBuffer *address, DataBuffer *mask, int el_size,
-                     DataBuffer *db) = 0;
+  virtual void Store(DataBuffer* address, DataBuffer* mask, int el_size,
+                     DataBuffer* db) = 0;
   // Convenience template function that calls the above function with the
   // element size as the sizeof() the template parameter type.
   template <typename T>
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, DataBuffer *db) {
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, DataBuffer* db) {
     Store(address_db, mask_db, sizeof(T), db);
   }
 };
@@ -137,8 +137,8 @@
   // db->size<uint8_t>() must be equal to sizeof(T) for some integer type, i.e.,
   // 1, 2, 4, or 8.
   virtual absl::Status PerformMemoryOp(uint64_t address, Operation op,
-                                       DataBuffer *db, Instruction *inst,
-                                       ReferenceCount *context) = 0;
+                                       DataBuffer* db, Instruction* inst,
+                                       ReferenceCount* context) = 0;
 };
 
 }  // namespace util
diff --git a/mpact/sim/util/memory/memory_router.cc b/mpact/sim/util/memory/memory_router.cc
index 2474952..7c86cf5 100644
--- a/mpact/sim/util/memory/memory_router.cc
+++ b/mpact/sim/util/memory/memory_router.cc
@@ -33,7 +33,7 @@
 MemoryRouter::MemoryRouter() {}
 
 MemoryRouter::~MemoryRouter() {
-  for (auto &[unused, initiator] : initiators_) delete initiator;
+  for (auto& [unused, initiator] : initiators_) delete initiator;
 
   initiators_.clear();
 }
@@ -41,29 +41,29 @@
 // Templated helper method used in implementing the three methods to add named
 // initiators to the router (one for each type of initiator interface).
 template <typename Interface>
-Interface *AddInitiator(MemoryRouter::InitiatorMap &initiators,
-                        const std::string &name) {
+Interface* AddInitiator(MemoryRouter::InitiatorMap& initiators,
+                        const std::string& name) {
   // See if it already exists.
   auto it = initiators.find(name);
   if (it != initiators.end()) {
-    return static_cast<Interface *>(it->second);
+    return static_cast<Interface*>(it->second);
   }
   auto initiator = new SingleInitiatorRouter(name);
   initiators.emplace(std::string(name), initiator);
-  return static_cast<Interface *>(initiator);
+  return static_cast<Interface*>(initiator);
 }
 
-MemoryInterface *MemoryRouter::AddMemoryInitiator(const std::string &name) {
+MemoryInterface* MemoryRouter::AddMemoryInitiator(const std::string& name) {
   return AddInitiator<MemoryInterface>(initiators_, name);
 }
 
-TaggedMemoryInterface *MemoryRouter::AddTaggedInitiator(
-    const std::string &name) {
+TaggedMemoryInterface* MemoryRouter::AddTaggedInitiator(
+    const std::string& name) {
   return AddInitiator<TaggedMemoryInterface>(initiators_, name);
 }
 
-AtomicMemoryOpInterface *MemoryRouter::AddAtomicInitiator(
-    const std::string &name) {
+AtomicMemoryOpInterface* MemoryRouter::AddAtomicInitiator(
+    const std::string& name) {
   return AddInitiator<AtomicMemoryOpInterface>(initiators_, name);
 }
 
@@ -73,9 +73,9 @@
 // add named targets to the router (one for each type of target interface).
 template <typename Interface>
 absl::Status AddTargetPrivate(
-    MemoryRouter::TargetMap<Interface> &target_interface_map,
-    absl::flat_hash_set<std::string> &target_names, const std::string &name,
-    Interface *memory) {
+    MemoryRouter::TargetMap<Interface>& target_interface_map,
+    absl::flat_hash_set<std::string>& target_names, const std::string& name,
+    Interface* memory) {
   // Only one instance of each target name can exist.
   if (target_names.contains(name)) {
     return absl::AlreadyExistsError(
@@ -88,28 +88,28 @@
 
 }  // namespace internal
 
-absl::Status MemoryRouter::AddTarget(const std::string &name,
-                                     MemoryInterface *memory) {
+absl::Status MemoryRouter::AddTarget(const std::string& name,
+                                     MemoryInterface* memory) {
   return internal::AddTargetPrivate<MemoryInterface>(
       memory_targets_, target_names_, name, memory);
 }
 
-absl::Status MemoryRouter::AddTarget(const std::string &name,
-                                     TaggedMemoryInterface *tagged_memory) {
+absl::Status MemoryRouter::AddTarget(const std::string& name,
+                                     TaggedMemoryInterface* tagged_memory) {
   return internal::AddTargetPrivate<TaggedMemoryInterface>(
       tagged_targets_, target_names_, name, tagged_memory);
 }
 
-absl::Status MemoryRouter::AddTarget(const std::string &name,
-                                     AtomicMemoryOpInterface *atomic_memory) {
+absl::Status MemoryRouter::AddTarget(const std::string& name,
+                                     AtomicMemoryOpInterface* atomic_memory) {
   return internal::AddTargetPrivate<AtomicMemoryOpInterface>(
       atomic_targets_, target_names_, name, atomic_memory);
 }
 
 // Add a mapping between 'initiator_name' and 'target_name' for the given
 // address range (inclusive).
-absl::Status MemoryRouter::AddMapping(const std::string &initiator_name,
-                                      const std::string &target_name,
+absl::Status MemoryRouter::AddMapping(const std::string& initiator_name,
+                                      const std::string& target_name,
                                       uint64_t base, uint64_t top) {
   // Return error if the initiator doesn't exist.
   auto it = initiators_.find(initiator_name);
@@ -117,7 +117,7 @@
     return absl::NotFoundError(
         absl::StrCat("Initiator: ", initiator_name, " not found"));
   }
-  auto *initiator = it->second;
+  auto* initiator = it->second;
 
   // Check each type of target and add the one found to the initiator with the
   // given address range.
diff --git a/mpact/sim/util/memory/memory_router.h b/mpact/sim/util/memory/memory_router.h
index a578ccb..f2c7cac 100644
--- a/mpact/sim/util/memory/memory_router.h
+++ b/mpact/sim/util/memory/memory_router.h
@@ -45,14 +45,13 @@
 class MemoryRouter {
  public:
   // Convenient map types shorthand.
-  using InitiatorMap =
-      absl::flat_hash_map<std::string, SingleInitiatorRouter *>;
+  using InitiatorMap = absl::flat_hash_map<std::string, SingleInitiatorRouter*>;
   template <typename Interface>
-  using TargetMap = absl::flat_hash_map<std::string, Interface *>;
+  using TargetMap = absl::flat_hash_map<std::string, Interface*>;
 
   MemoryRouter();
-  MemoryRouter(const MemoryRouter &) = delete;
-  MemoryRouter &operator=(const MemoryRouter &) = delete;
+  MemoryRouter(const MemoryRouter&) = delete;
+  MemoryRouter& operator=(const MemoryRouter&) = delete;
   ~MemoryRouter();
 
   // The following three methods add initiators with a given name. Depending
@@ -62,28 +61,28 @@
   // SingleInitiatorRouter, but the returned interfaces differ.
 
   // Add an initiator with name 'name', returning pointer to MemoryInterface.
-  MemoryInterface *AddMemoryInitiator(const std::string &name);
+  MemoryInterface* AddMemoryInitiator(const std::string& name);
   // Add an initiator with name 'name', returning pointer to
   // TaggedMemoryInterface.
-  TaggedMemoryInterface *AddTaggedInitiator(const std::string &name);
+  TaggedMemoryInterface* AddTaggedInitiator(const std::string& name);
   // Add an initiator with name 'name', returning pointer to MemoryInterface.
-  AtomicMemoryOpInterface *AddAtomicInitiator(const std::string &name);
+  AtomicMemoryOpInterface* AddAtomicInitiator(const std::string& name);
 
   // The following three methods add target memory interfaces with the given
   // name and type. Two different interfaces may not use the same name.
 
   // Add 'memory' interface with name 'name'.
-  absl::Status AddTarget(const std::string &name, MemoryInterface *memory);
+  absl::Status AddTarget(const std::string& name, MemoryInterface* memory);
   // Add 'tagged_memory' interface with name 'name'.
-  absl::Status AddTarget(const std::string &name,
-                         TaggedMemoryInterface *tagged_memory);
+  absl::Status AddTarget(const std::string& name,
+                         TaggedMemoryInterface* tagged_memory);
   // Add 'atomic_memory' interface with name 'name'.
-  absl::Status AddTarget(const std::string &name,
-                         AtomicMemoryOpInterface *atomic_memory);
+  absl::Status AddTarget(const std::string& name,
+                         AtomicMemoryOpInterface* atomic_memory);
 
   // Map a target to an initiator for the given address range (inclusive).
-  absl::Status AddMapping(const std::string &initiator_name,
-                          const std::string &target_name, uint64_t base,
+  absl::Status AddMapping(const std::string& initiator_name,
+                          const std::string& target_name, uint64_t base,
                           uint64_t top);
 
  private:
diff --git a/mpact/sim/util/memory/memory_use_profiler.cc b/mpact/sim/util/memory/memory_use_profiler.cc
index ea04787..35ef4ed 100644
--- a/mpact/sim/util/memory/memory_use_profiler.cc
+++ b/mpact/sim/util/memory/memory_use_profiler.cc
@@ -33,14 +33,14 @@
 namespace internal {
 
 MemoryUseTracker::~MemoryUseTracker() {
-  for (auto &[unused, bits] : memory_use_map_) {
+  for (auto& [unused, bits] : memory_use_map_) {
     delete[] bits;
   }
   memory_use_map_.clear();
 }
 
 // Static helper function.
-static inline void MarkUsedBits(uint64_t byte_offset, int mask, uint8_t *bits) {
+static inline void MarkUsedBits(uint64_t byte_offset, int mask, uint8_t* bits) {
   // Shift right by two, so that every byte offset becomes a word offset.
   uint64_t word_offset = byte_offset >> 2;
   // Byte offs
@@ -68,7 +68,7 @@
     // Compute new base and top addresses.
     uint64_t start = address & ~kBaseMask;
     uint64_t end = start + kSegmentSize - 1;
-    auto *bits = new uint8_t[kBitsSize];
+    auto* bits = new uint8_t[kBitsSize];
     std::memset(bits, 0, kBitsSize);
 
     it = memory_use_map_
@@ -83,12 +83,12 @@
 }
 
 // Write out ranges of words that have been used.
-void MemoryUseTracker::WriteUseProfile(std::ostream &os) const {
+void MemoryUseTracker::WriteUseProfile(std::ostream& os) const {
   // Current range info.
   uint64_t range_start = 0;
   uint64_t range_end = 0;
   bool range_started = false;
-  for (auto const &[range, bits] : memory_use_map_) {
+  for (auto const& [range, bits] : memory_use_map_) {
     auto base = range.start;
     int byte_index = 0;
     uint8_t byte = bits[byte_index];
@@ -134,18 +134,18 @@
 
 MemoryUseProfiler::MemoryUseProfiler() : MemoryUseProfiler(nullptr) {}
 
-MemoryUseProfiler::MemoryUseProfiler(MemoryInterface *memory)
+MemoryUseProfiler::MemoryUseProfiler(MemoryInterface* memory)
     : memory_(memory) {}
 
-void MemoryUseProfiler::Load(uint64_t address, DataBuffer *db,
-                             Instruction *inst, ReferenceCount *context) {
+void MemoryUseProfiler::Load(uint64_t address, DataBuffer* db,
+                             Instruction* inst, ReferenceCount* context) {
   if (is_enabled_) tracker_.MarkUsed(address, db->size<uint8_t>());
   if (memory_) memory_->Load(address, db, inst, context);
 }
 
-void MemoryUseProfiler::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                             int el_size, DataBuffer *db, Instruction *inst,
-                             ReferenceCount *context) {
+void MemoryUseProfiler::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                             int el_size, DataBuffer* db, Instruction* inst,
+                             ReferenceCount* context) {
   if (is_enabled_) {
     for (int i = 0; i < address_db->size<uint64_t>(); ++i) {
       if (mask_db->Get<uint8_t>(i)) {
@@ -156,13 +156,13 @@
   if (memory_) memory_->Load(address_db, mask_db, el_size, db, inst, context);
 }
 
-void MemoryUseProfiler::Store(uint64_t address, DataBuffer *db) {
+void MemoryUseProfiler::Store(uint64_t address, DataBuffer* db) {
   if (is_enabled_) tracker_.MarkUsed(address, db->size<uint8_t>());
   if (memory_) memory_->Store(address, db);
 }
 
-void MemoryUseProfiler::Store(DataBuffer *address_db, DataBuffer *mask_db,
-                              int el_size, DataBuffer *db) {
+void MemoryUseProfiler::Store(DataBuffer* address_db, DataBuffer* mask_db,
+                              int el_size, DataBuffer* db) {
   if (is_enabled_) {
     for (int i = 0; i < address_db->size<uint64_t>(); ++i) {
       if (mask_db->Get<uint8_t>(i)) {
@@ -177,18 +177,18 @@
     : TaggedMemoryUseProfiler(nullptr) {}
 
 TaggedMemoryUseProfiler::TaggedMemoryUseProfiler(
-    TaggedMemoryInterface *tagged_memory)
+    TaggedMemoryInterface* tagged_memory)
     : tagged_memory_(tagged_memory) {}
 
-void TaggedMemoryUseProfiler::Load(uint64_t address, DataBuffer *db,
-                                   Instruction *inst, ReferenceCount *context) {
+void TaggedMemoryUseProfiler::Load(uint64_t address, DataBuffer* db,
+                                   Instruction* inst, ReferenceCount* context) {
   if (is_enabled_) tracker_.MarkUsed(address, db->size<uint8_t>());
   if (tagged_memory_) tagged_memory_->Load(address, db, inst, context);
 }
 
-void TaggedMemoryUseProfiler::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                                   int el_size, DataBuffer *db,
-                                   Instruction *inst, ReferenceCount *context) {
+void TaggedMemoryUseProfiler::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                                   int el_size, DataBuffer* db,
+                                   Instruction* inst, ReferenceCount* context) {
   if (is_enabled_) {
     for (int i = 0; i < address_db->size<uint64_t>(); ++i) {
       if (mask_db->Get<uint8_t>(i)) {
@@ -200,21 +200,21 @@
     tagged_memory_->Load(address_db, mask_db, el_size, db, inst, context);
 }
 
-void TaggedMemoryUseProfiler::Load(uint64_t address, DataBuffer *db,
-                                   DataBuffer *tags, Instruction *inst,
-                                   ReferenceCount *context) {
+void TaggedMemoryUseProfiler::Load(uint64_t address, DataBuffer* db,
+                                   DataBuffer* tags, Instruction* inst,
+                                   ReferenceCount* context) {
   if ((db != nullptr) && is_enabled_)
     tracker_.MarkUsed(address, db->size<uint8_t>());
   if (tagged_memory_) tagged_memory_->Load(address, db, tags, inst, context);
 }
 
-void TaggedMemoryUseProfiler::Store(uint64_t address, DataBuffer *db) {
+void TaggedMemoryUseProfiler::Store(uint64_t address, DataBuffer* db) {
   if (is_enabled_) tracker_.MarkUsed(address, db->size<uint8_t>());
   if (tagged_memory_) tagged_memory_->Store(address, db);
 }
 
-void TaggedMemoryUseProfiler::Store(DataBuffer *address_db, DataBuffer *mask_db,
-                                    int el_size, DataBuffer *db) {
+void TaggedMemoryUseProfiler::Store(DataBuffer* address_db, DataBuffer* mask_db,
+                                    int el_size, DataBuffer* db) {
   if (is_enabled_) {
     for (int i = 0; i < address_db->size<uint64_t>(); ++i) {
       if (mask_db->Get<uint8_t>(i)) {
@@ -225,8 +225,8 @@
   if (tagged_memory_) tagged_memory_->Store(address_db, mask_db, el_size, db);
 }
 
-void TaggedMemoryUseProfiler::Store(uint64_t address, DataBuffer *db,
-                                    DataBuffer *tags) {
+void TaggedMemoryUseProfiler::Store(uint64_t address, DataBuffer* db,
+                                    DataBuffer* tags) {
   if ((db != nullptr) && is_enabled_)
     tracker_.MarkUsed(address, db->size<uint8_t>());
   if (tagged_memory_) tagged_memory_->Store(address, db, tags);
diff --git a/mpact/sim/util/memory/memory_use_profiler.h b/mpact/sim/util/memory/memory_use_profiler.h
index b5785f6..bd24ae1 100644
--- a/mpact/sim/util/memory/memory_use_profiler.h
+++ b/mpact/sim/util/memory/memory_use_profiler.h
@@ -54,13 +54,13 @@
   // Size of each 'use' bit store.
   static constexpr int kBitsSize = kSegmentSize / (kGranularity * 8);
   void MarkUsed(uint64_t address, int size);
-  void WriteUseProfile(std::ostream &os) const;
+  void WriteUseProfile(std::ostream& os) const;
 
  private:
   uint64_t last_start_ = 0;
   uint64_t last_end_ = 0;
-  uint8_t *last_used_ = nullptr;
-  absl::btree_map<MemoryWatcher::AddressRange, uint8_t *,
+  uint8_t* last_used_ = nullptr;
+  absl::btree_map<MemoryWatcher::AddressRange, uint8_t*,
                   MemoryWatcher::AddressRangeLess>
       memory_use_map_;
 };
@@ -72,20 +72,20 @@
  public:
   // The default constructor does not set up memory forwarding.
   MemoryUseProfiler();
-  explicit MemoryUseProfiler(MemoryInterface *memory);
+  explicit MemoryUseProfiler(MemoryInterface* memory);
   ~MemoryUseProfiler() override = default;
 
   // Inherited from memory interfaces.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Store(uint64_t address, DataBuffer *db) override;
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Store(uint64_t address, DataBuffer* db) override;
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override;
 
-  void WriteProfile(std::ostream &os) const { tracker_.WriteUseProfile(os); }
+  void WriteProfile(std::ostream& os) const { tracker_.WriteUseProfile(os); }
 
   // Accessor.
   void set_is_enabled(bool is_enabled) { is_enabled_ = is_enabled; }
@@ -93,7 +93,7 @@
 
  private:
   bool is_enabled_ = false;
-  MemoryInterface *memory_;
+  MemoryInterface* memory_;
   internal::MemoryUseTracker tracker_;
 };
 
@@ -102,30 +102,30 @@
  public:
   // The default constructor does not set up memory forwarding.
   TaggedMemoryUseProfiler();
-  explicit TaggedMemoryUseProfiler(TaggedMemoryInterface *tagged_memory);
+  explicit TaggedMemoryUseProfiler(TaggedMemoryInterface* tagged_memory);
   ~TaggedMemoryUseProfiler() override = default;
 
   // Inherited from memory interfaces.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Load(uint64_t address, DataBuffer *db, DataBuffer *tags,
-            Instruction *inst, ReferenceCount *context) override;
-  void Store(uint64_t address, DataBuffer *db) override;
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override;
-  void Store(uint64_t address, DataBuffer *db, DataBuffer *tags) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Load(uint64_t address, DataBuffer* db, DataBuffer* tags,
+            Instruction* inst, ReferenceCount* context) override;
+  void Store(uint64_t address, DataBuffer* db) override;
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override;
+  void Store(uint64_t address, DataBuffer* db, DataBuffer* tags) override;
 
-  void WriteProfile(std::ostream &os) const { tracker_.WriteUseProfile(os); }
+  void WriteProfile(std::ostream& os) const { tracker_.WriteUseProfile(os); }
 
   // Accessor.
   void set_is_enabled(bool is_enabled) { is_enabled_ = is_enabled; }
 
  private:
   bool is_enabled_ = false;
-  TaggedMemoryInterface *tagged_memory_;
+  TaggedMemoryInterface* tagged_memory_;
   internal::MemoryUseTracker tracker_;
 };
 
diff --git a/mpact/sim/util/memory/memory_watcher.cc b/mpact/sim/util/memory/memory_watcher.cc
index 5da7f72..34b7fe5 100644
--- a/mpact/sim/util/memory/memory_watcher.cc
+++ b/mpact/sim/util/memory/memory_watcher.cc
@@ -19,18 +19,19 @@
 
 #include "absl/status/status.h"
 #include "absl/strings/str_cat.h"
+#include "mpact/sim/util/memory/memory_interface.h"
 
 namespace mpact {
 namespace sim {
 namespace util {
 
-MemoryWatcher::MemoryWatcher(MemoryInterface *memory) : memory_(memory) {}
+MemoryWatcher::MemoryWatcher(MemoryInterface* memory) : memory_(memory) {}
 
 // Methods to insert store and load watch callbacks. The methods check that
 // the address range is well formed (start <= end), and that there is no
 // overlapping range in the btree map.
 
-absl::Status MemoryWatcher::SetStoreWatchCallback(const AddressRange &range,
+absl::Status MemoryWatcher::SetStoreWatchCallback(const AddressRange& range,
                                                   Callback callback) {
   if (range.start > range.end) {
     return absl::InternalError(absl::StrCat("Illegal store watch range: start ",
@@ -57,7 +58,7 @@
   return absl::OkStatus();
 }
 
-absl::Status MemoryWatcher::SetLoadWatchCallback(const AddressRange &range,
+absl::Status MemoryWatcher::SetLoadWatchCallback(const AddressRange& range,
                                                  Callback callback) {
   if (range.start > range.end) {
     return absl::InternalError(absl::StrCat("Illegal store watch range: start ",
@@ -89,8 +90,8 @@
 // is called before/after the load/store is forwarded to the interface.
 
 // Single address.
-void MemoryWatcher::Load(uint64_t address, DataBuffer *db, Instruction *inst,
-                         ReferenceCount *context) {
+void MemoryWatcher::Load(uint64_t address, DataBuffer* db, Instruction* inst,
+                         ReferenceCount* context) {
   if (!ld_watch_actions_.empty()) {
     auto [first_match, last] = ld_watch_actions_.equal_range(
         AddressRange(address, address + db->size<uint8_t>() - 1));
@@ -103,9 +104,9 @@
 }
 
 // Gather load (multiple addresses and a mask vector).
-void MemoryWatcher::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                         int el_size, DataBuffer *db, Instruction *inst,
-                         ReferenceCount *context) {
+void MemoryWatcher::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                         int el_size, DataBuffer* db, Instruction* inst,
+                         ReferenceCount* context) {
   if (!ld_watch_actions_.empty()) {
     int num_entries = mask_db->size<bool>();
     auto addresses = address_db->Get<uint64_t>();
@@ -126,7 +127,7 @@
 }
 
 // Single address store.
-void MemoryWatcher::Store(uint64_t address, DataBuffer *db) {
+void MemoryWatcher::Store(uint64_t address, DataBuffer* db) {
   memory_->Store(address, db);
   if (!st_watch_actions_.empty()) {
     auto [first_match, last] = st_watch_actions_.equal_range(
@@ -139,8 +140,8 @@
 }
 
 // Scatter store (multiple addresses and a mask vector).
-void MemoryWatcher::Store(DataBuffer *address_db, DataBuffer *mask_db,
-                          int el_size, DataBuffer *db) {
+void MemoryWatcher::Store(DataBuffer* address_db, DataBuffer* mask_db,
+                          int el_size, DataBuffer* db) {
   memory_->Store(address_db, mask_db, el_size, db);
   if (!st_watch_actions_.empty()) {
     int num_entries = mask_db->size<bool>();
diff --git a/mpact/sim/util/memory/memory_watcher.h b/mpact/sim/util/memory/memory_watcher.h
index d9acfa7..b332ad1 100644
--- a/mpact/sim/util/memory/memory_watcher.h
+++ b/mpact/sim/util/memory/memory_watcher.h
@@ -51,8 +51,8 @@
   // if they do (a) not overlap and (b) the addresses of the first are less than
   // the other.
   struct AddressRangeLess {
-    constexpr bool operator()(const AddressRange &lhs,
-                              const AddressRange &rhs) const {
+    constexpr bool operator()(const AddressRange& lhs,
+                              const AddressRange& rhs) const {
       return lhs.end < rhs.start;
     }
   };
@@ -63,10 +63,10 @@
   using Callback = absl::AnyInvocable<void(uint64_t, int)>;
 
   // Constructor - default constructor is disabled. Use default destructor.
-  explicit MemoryWatcher(MemoryInterface *memory);
+  explicit MemoryWatcher(MemoryInterface* memory);
   MemoryWatcher() = delete;
-  MemoryWatcher(const MemoryWatcher &) = delete;  // no copy constructor.
-  MemoryWatcher &operator=(const MemoryWatcher &) = delete;  // no assignment.
+  MemoryWatcher(const MemoryWatcher&) = delete;  // no copy constructor.
+  MemoryWatcher& operator=(const MemoryWatcher&) = delete;  // no assignment.
   ~MemoryWatcher() override = default;
 
   // Methods to set/clear watch ranges. No new store (load) range can overlap an
@@ -74,26 +74,26 @@
   // Since there cannot be any overlapping ranges, it is only necessary to
   // specify a single address for the clear call, as it will map to the range
   // that contains it.
-  absl::Status SetStoreWatchCallback(const AddressRange &range,
+  absl::Status SetStoreWatchCallback(const AddressRange& range,
                                      Callback callback);
   absl::Status ClearStoreWatchCallback(uint64_t address);
-  absl::Status SetLoadWatchCallback(const AddressRange &range,
+  absl::Status SetLoadWatchCallback(const AddressRange& range,
                                     Callback callback);
   absl::Status ClearLoadWatchCallback(uint64_t address);
 
   // The memory interface methods.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Store(uint64_t address, DataBuffer *db) override;
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Store(uint64_t address, DataBuffer* db) override;
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override;
 
  private:
   // The memory interface to forward the loads/stores to.
-  MemoryInterface *memory_;
+  MemoryInterface* memory_;
   absl::btree_multimap<AddressRange, Callback, AddressRangeLess>
       ld_watch_actions_;
   absl::btree_multimap<AddressRange, Callback, AddressRangeLess>
diff --git a/mpact/sim/util/memory/single_initiator_router.cc b/mpact/sim/util/memory/single_initiator_router.cc
index b4d1094..d07b461 100644
--- a/mpact/sim/util/memory/single_initiator_router.cc
+++ b/mpact/sim/util/memory/single_initiator_router.cc
@@ -40,7 +40,7 @@
 // memory interface, base address, and address space size.
 template <typename Interface>
 static absl::Status AddTargetPrivate(
-    SingleInitiatorRouter::InterfaceMap<Interface> &map, Interface *interface,
+    SingleInitiatorRouter::InterfaceMap<Interface>& map, Interface* interface,
     uint64_t base, uint64_t top) {
   // Make sure the range is valid and makes sense.
   if (base > top) {
@@ -69,20 +69,20 @@
 // Template specializations of the AddTarget method.
 template <>
 absl::Status SingleInitiatorRouter::AddTarget<MemoryInterface>(
-    MemoryInterface *memory, uint64_t base, uint64_t top) {
+    MemoryInterface* memory, uint64_t base, uint64_t top) {
   return AddTargetPrivate<MemoryInterface>(memory_targets_, memory, base, top);
 }
 
 template <>
 absl::Status SingleInitiatorRouter::AddTarget<TaggedMemoryInterface>(
-    TaggedMemoryInterface *tagged_memory, uint64_t base, uint64_t top) {
+    TaggedMemoryInterface* tagged_memory, uint64_t base, uint64_t top) {
   return AddTargetPrivate<TaggedMemoryInterface>(tagged_targets_, tagged_memory,
                                                  base, top);
 }
 
 template <>
 absl::Status SingleInitiatorRouter::AddTarget<AtomicMemoryOpInterface>(
-    AtomicMemoryOpInterface *atomic_memory, uint64_t base, uint64_t top) {
+    AtomicMemoryOpInterface* atomic_memory, uint64_t base, uint64_t top) {
   return AddTargetPrivate<AtomicMemoryOpInterface>(atomic_targets_,
                                                    atomic_memory, base, top);
 }
@@ -90,7 +90,7 @@
 // Template specializations of the AddDefaultTarget method.
 template <>
 absl::Status SingleInitiatorRouter::AddDefaultTarget<MemoryInterface>(
-    MemoryInterface *memory) {
+    MemoryInterface* memory) {
   if ((memory != nullptr) && (default_memory_target_ != nullptr)) {
     return absl::AlreadyExistsError("Default memory target already exists");
   }
@@ -100,7 +100,7 @@
 
 template <>
 absl::Status SingleInitiatorRouter::AddDefaultTarget<TaggedMemoryInterface>(
-    TaggedMemoryInterface *tagged_memory) {
+    TaggedMemoryInterface* tagged_memory) {
   if ((tagged_memory != nullptr) && (default_tagged_target_ != nullptr)) {
     return absl::AlreadyExistsError(
         "Default tagged memory target already exists");
@@ -111,7 +111,7 @@
 
 template <>
 absl::Status SingleInitiatorRouter::AddDefaultTarget<AtomicMemoryOpInterface>(
-    AtomicMemoryOpInterface *atomic_memory) {
+    AtomicMemoryOpInterface* atomic_memory) {
   if ((atomic_memory != nullptr) && (default_atomic_target_ != nullptr)) {
     return absl::AlreadyExistsError(
         "Default atomic memory target already exists");
@@ -125,12 +125,12 @@
 // they log an error and return.
 
 // Plain memory load.
-void SingleInitiatorRouter::Load(uint64_t address, DataBuffer *db,
-                                 Instruction *inst, ReferenceCount *context) {
+void SingleInitiatorRouter::Load(uint64_t address, DataBuffer* db,
+                                 Instruction* inst, ReferenceCount* context) {
   int size = db->size<uint8_t>();
   auto it = memory_targets_.find({address, address + size - 1});
   if (it != memory_targets_.end()) {
-    auto &range = it->first;
+    auto& range = it->first;
     if ((range.base <= address) && (range.top >= address + size - 1)) {
       return it->second->Load(address, db, inst, context);
     }
@@ -144,7 +144,7 @@
   // too.
   auto tagged_it = tagged_targets_.find({address, address});
   if (tagged_it != tagged_targets_.end()) {
-    auto &range = tagged_it->first;
+    auto& range = tagged_it->first;
     if ((range.base <= address) && (range.top >= address + size - 1)) {
       return tagged_it->second->Load(address, db, inst, context);
     }
@@ -159,25 +159,25 @@
 }
 
 // Vector memory load.
-void SingleInitiatorRouter::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                                 int el_size, DataBuffer *db, Instruction *inst,
-                                 ReferenceCount *context) {
+void SingleInitiatorRouter::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                                 int el_size, DataBuffer* db, Instruction* inst,
+                                 ReferenceCount* context) {
   // This is a vector load, so check each address that is not masked off.
   // Vector memory loads will not be split across multiple targets.
   int count = address_db->size<uint64_t>();
-  MemoryInterface *memory = nullptr;
+  MemoryInterface* memory = nullptr;
   for (int i = 0; i < count; i++) {
     // If the mask is true, check this address.
     if (mask_db->Get<uint8_t>(i)) {
       auto address = address_db->Get<uint64_t>(i);
       auto it = memory_targets_.find({address, address + el_size - 1});
-      MemoryInterface *tmp_memory = nullptr;
+      MemoryInterface* tmp_memory = nullptr;
       if (it == memory_targets_.end()) {
         // If there are no overlapping targets, use the default, if it is set.
         if (default_memory_target_ == nullptr) break;
         tmp_memory = default_memory_target_;
       } else {
-        auto &range = it->first;
+        auto& range = it->first;
         // If there is no proper overlap, just break out of the loop. We are
         // not splitting the memory access across multiple targets.
         if ((range.base > address) || (range.top < address + el_size - 1))
@@ -200,18 +200,18 @@
   // Since the vector memory load can occur in both MemoryInterface and
   // TaggedMemoryInterface, we need to check the tagged memory interface map
   // too.
-  TaggedMemoryInterface *tagged_memory = nullptr;
+  TaggedMemoryInterface* tagged_memory = nullptr;
   for (int i = 0; i < count; i++) {
     if (mask_db->Get<uint8_t>(i)) {
       auto address = address_db->Get<uint64_t>(i);
       auto it = tagged_targets_.find({address, address + el_size - 1});
-      TaggedMemoryInterface *tmp_memory = nullptr;
+      TaggedMemoryInterface* tmp_memory = nullptr;
       if (it == tagged_targets_.end()) {
         // If there are no overlapping targets, use the default, if it is set.
         if (default_tagged_target_ == nullptr) break;
         tmp_memory = default_tagged_target_;
       } else {
-        auto &range = it->first;
+        auto& range = it->first;
         // If there is no proper overlap, just break out of the loop. We are
         // not splitting the memory access across multiple targets.
         if ((range.base > address) || (range.top < address + el_size - 1))
@@ -235,9 +235,9 @@
 }
 
 // Tagged memory load.
-void SingleInitiatorRouter::Load(uint64_t address, DataBuffer *db,
-                                 DataBuffer *tags, Instruction *inst,
-                                 ReferenceCount *context) {
+void SingleInitiatorRouter::Load(uint64_t address, DataBuffer* db,
+                                 DataBuffer* tags, Instruction* inst,
+                                 ReferenceCount* context) {
   int size;
   // If db is null, then this is a tag load. The size for routing purposes is
   // the size of tags * 8.
@@ -248,7 +248,7 @@
   }
   auto tagged_it = tagged_targets_.find({address, address + size - 1});
   if (tagged_it != tagged_targets_.end()) {
-    auto &range = tagged_it->first;
+    auto& range = tagged_it->first;
     if ((range.base <= address) && (range.top >= address + size - 1)) {
       return tagged_it->second->Load(address, db, tags, inst, context);
     }
@@ -263,11 +263,11 @@
 }
 
 // Plain memory store.
-void SingleInitiatorRouter::Store(uint64_t address, DataBuffer *db) {
+void SingleInitiatorRouter::Store(uint64_t address, DataBuffer* db) {
   int size = db->size<uint8_t>();
   auto it = memory_targets_.find({address, address + size});
   if (it != memory_targets_.end()) {
-    auto &range = it->first;
+    auto& range = it->first;
     if ((range.base <= address) && (range.top >= address + size - 1)) {
       return it->second->Store(address, db);
     }
@@ -281,7 +281,7 @@
   // too.
   auto tagged_it = tagged_targets_.find({address, address});
   if (tagged_it != tagged_targets_.end()) {
-    auto &range = tagged_it->first;
+    auto& range = tagged_it->first;
     if ((range.base <= address) && (range.top >= address + size - 1)) {
       return tagged_it->second->Store(address, db);
     }
@@ -296,24 +296,24 @@
 }
 
 // Vector memory store.
-void SingleInitiatorRouter::Store(DataBuffer *address_db, DataBuffer *mask_db,
-                                  int el_size, DataBuffer *db) {
+void SingleInitiatorRouter::Store(DataBuffer* address_db, DataBuffer* mask_db,
+                                  int el_size, DataBuffer* db) {
   // This is a vector store, so check each address that is not masked off.
   // Vector memory stores will not be split across multiple targets.
   int count = address_db->size<uint64_t>();
-  MemoryInterface *memory = nullptr;
+  MemoryInterface* memory = nullptr;
   for (int i = 0; i < count; i++) {
     // If the mask is true, check this address.
     if (mask_db->Get<uint8_t>(i)) {
       auto address = address_db->Get<uint64_t>(i);
       auto it = memory_targets_.find({address, address + el_size - 1});
-      MemoryInterface *tmp_memory = nullptr;
+      MemoryInterface* tmp_memory = nullptr;
       if (it == memory_targets_.end()) {
         // If there are no overlapping targets, use the default, if it is set.
         if (default_memory_target_ == nullptr) break;
         tmp_memory = default_memory_target_;
       } else {
-        auto &range = it->first;
+        auto& range = it->first;
         // If there is no proper overlap, just break out of the loop. We are
         // not splitting the memory access across multiple targets.
         if ((range.base > address) || (range.top < address + el_size - 1))
@@ -336,18 +336,18 @@
   // Since the vector memory store can occur in both MemoryInterface and
   // TaggedMemoryInterface, we need to check the tagged memory interface map
   // too.
-  TaggedMemoryInterface *tagged_memory = nullptr;
+  TaggedMemoryInterface* tagged_memory = nullptr;
   for (int i = 0; i < count; i++) {
     if (mask_db->Get<uint8_t>(i)) {
       auto address = address_db->Get<uint64_t>(i);
       auto it = tagged_targets_.find({address, address + el_size});
-      TaggedMemoryInterface *tmp_memory = nullptr;
+      TaggedMemoryInterface* tmp_memory = nullptr;
       if (it == tagged_targets_.end()) {
         // If there are no overlapping targets, use the default, if it is set.
         if (default_tagged_target_ == nullptr) break;
         tmp_memory = default_tagged_target_;
       } else {
-        auto &range = it->first;
+        auto& range = it->first;
         // If there is no proper overlap, just break out of the loop. We are
         // not splitting the memory access across multiple targets.
         if ((range.base > address) || (range.top < address + el_size)) break;
@@ -370,12 +370,12 @@
 }
 
 // Simple tagged memory store.
-void SingleInitiatorRouter::Store(uint64_t address, DataBuffer *db,
-                                  DataBuffer *tags) {
+void SingleInitiatorRouter::Store(uint64_t address, DataBuffer* db,
+                                  DataBuffer* tags) {
   int size = db->size<uint8_t>();
   auto tagged_it = tagged_targets_.find({address, address + size - 1});
   if (tagged_it != tagged_targets_.end()) {
-    auto &range = tagged_it->first;
+    auto& range = tagged_it->first;
     if ((range.base <= address) && (range.top >= address + size - 1)) {
       return tagged_it->second->Store(address, db, tags);
     } else {
@@ -395,13 +395,13 @@
 // Atomic memory operation.
 absl::Status SingleInitiatorRouter::PerformMemoryOp(uint64_t address,
                                                     Operation op,
-                                                    DataBuffer *db,
-                                                    Instruction *inst,
-                                                    ReferenceCount *context) {
+                                                    DataBuffer* db,
+                                                    Instruction* inst,
+                                                    ReferenceCount* context) {
   int size = db->size<uint8_t>();
   auto atomic_it = atomic_targets_.find({address, address + size - 1});
   if (atomic_it != atomic_targets_.end()) {
-    auto &range = atomic_it->first;
+    auto& range = atomic_it->first;
     if ((range.base <= address) && (range.top >= address + size - 1)) {
       return atomic_it->second->PerformMemoryOp(address, op, db, inst, context);
     }
diff --git a/mpact/sim/util/memory/single_initiator_router.h b/mpact/sim/util/memory/single_initiator_router.h
index 39a7d77..27e5785 100644
--- a/mpact/sim/util/memory/single_initiator_router.h
+++ b/mpact/sim/util/memory/single_initiator_router.h
@@ -50,57 +50,57 @@
   };
   // Comparator for address ranges.
   struct AddressRangeLess {
-    bool operator()(const AddressRange &lhs, const AddressRange &rhs) const {
+    bool operator()(const AddressRange& lhs, const AddressRange& rhs) const {
       return (lhs.top < rhs.base);
     }
   };
   // Map type convenience template.
   template <typename Interface>
   using InterfaceMap =
-      absl::btree_map<SingleInitiatorRouter::AddressRange, Interface *,
+      absl::btree_map<SingleInitiatorRouter::AddressRange, Interface*,
                       SingleInitiatorRouter::AddressRangeLess>;
 
   // Constructor and destructor.
   explicit SingleInitiatorRouter(std::string name);
-  SingleInitiatorRouter(const SingleInitiatorRouter &) = delete;
-  SingleInitiatorRouter &operator=(const SingleInitiatorRouter &) = delete;
+  SingleInitiatorRouter(const SingleInitiatorRouter&) = delete;
+  SingleInitiatorRouter& operator=(const SingleInitiatorRouter&) = delete;
   ~SingleInitiatorRouter();
 
   // Add 'memory' target interface with given range. Only three interface types
   // are supported: MemoryInterface, TaggedMemoryInterface, and
   // AtomicMemoryOpInterface.
   template <typename Interface>
-  absl::Status AddTarget(Interface *memory, uint64_t base, uint64_t top);
+  absl::Status AddTarget(Interface* memory, uint64_t base, uint64_t top);
 
   // Add 'memory' target interface as default target, that is, if no other
   // interface matches, it is the fallback interface. Only three interface types
   // are supported: MemoryInterface, TaggedMemoryInterface, and
   // AtomicMemoryOpInterface.
   template <typename Interface>
-  absl::Status AddDefaultTarget(Interface *memory);
+  absl::Status AddDefaultTarget(Interface* memory);
 
   // Memory interface methods.
   // Plain load.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Vector load.
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Tagged load.
-  void Load(uint64_t address, DataBuffer *db, DataBuffer *tags,
-            Instruction *inst, ReferenceCount *context) override;
+  void Load(uint64_t address, DataBuffer* db, DataBuffer* tags,
+            Instruction* inst, ReferenceCount* context) override;
   // Plain store.
-  void Store(uint64_t address, DataBuffer *db) override;
+  void Store(uint64_t address, DataBuffer* db) override;
   // Vector store.
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override;
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override;
   // Tagged store.
-  void Store(uint64_t address, DataBuffer *db, DataBuffer *tags) override;
+  void Store(uint64_t address, DataBuffer* db, DataBuffer* tags) override;
   // Atomic memory operation.
-  absl::Status PerformMemoryOp(uint64_t address, Operation op, DataBuffer *db,
-                               Instruction *inst,
-                               ReferenceCount *context) override;
+  absl::Status PerformMemoryOp(uint64_t address, Operation op, DataBuffer* db,
+                               Instruction* inst,
+                               ReferenceCount* context) override;
 
   // Accessors.
   std::string_view name() const { return name_; }
@@ -109,11 +109,11 @@
   std::string name_;
   // These maps are used to look up target interfaces based on addresses.
   InterfaceMap<MemoryInterface> memory_targets_;
-  MemoryInterface *default_memory_target_ = nullptr;
+  MemoryInterface* default_memory_target_ = nullptr;
   InterfaceMap<TaggedMemoryInterface> tagged_targets_;
-  TaggedMemoryInterface *default_tagged_target_ = nullptr;
+  TaggedMemoryInterface* default_tagged_target_ = nullptr;
   InterfaceMap<AtomicMemoryOpInterface> atomic_targets_;
-  AtomicMemoryOpInterface *default_atomic_target_ = nullptr;
+  AtomicMemoryOpInterface* default_atomic_target_ = nullptr;
 };
 
 }  // namespace util
diff --git a/mpact/sim/util/memory/tagged_flat_demand_memory.cc b/mpact/sim/util/memory/tagged_flat_demand_memory.cc
index 73b8593..2537544 100644
--- a/mpact/sim/util/memory/tagged_flat_demand_memory.cc
+++ b/mpact/sim/util/memory/tagged_flat_demand_memory.cc
@@ -60,9 +60,9 @@
   db_factory_ = nullptr;
 }
 
-void TaggedFlatDemandMemory::Load(uint64_t address, DataBuffer *db,
-                                  DataBuffer *tags, Instruction *inst,
-                                  ReferenceCount *context) {
+void TaggedFlatDemandMemory::Load(uint64_t address, DataBuffer* db,
+                                  DataBuffer* tags, Instruction* inst,
+                                  ReferenceCount* context) {
   if (!CheckRequest(address, db, tags)) return;
 
   // Load data with no latency. If db is null, then skip the load, but load the
@@ -75,8 +75,8 @@
   FinishLoad(latency, inst, context);
 }
 
-void TaggedFlatDemandMemory::Store(uint64_t address, DataBuffer *db,
-                                   DataBuffer *tags) {
+void TaggedFlatDemandMemory::Store(uint64_t address, DataBuffer* db,
+                                   DataBuffer* tags) {
   if (!CheckRequest(address, db, tags)) return;
   // Store data and tags.
   data_memory_->Store(address, db);
@@ -84,28 +84,28 @@
 }
 
 // Untagged load is passed directly to the data memory.
-void TaggedFlatDemandMemory::Load(uint64_t address, DataBuffer *db,
-                                  Instruction *inst, ReferenceCount *context) {
+void TaggedFlatDemandMemory::Load(uint64_t address, DataBuffer* db,
+                                  Instruction* inst, ReferenceCount* context) {
   data_memory_->Load(address, db, inst, context);
 }
 
 // Untagged vector load is passed directly to the data memory.
-void TaggedFlatDemandMemory::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                                  int el_size, DataBuffer *db,
-                                  Instruction *inst, ReferenceCount *context) {
+void TaggedFlatDemandMemory::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                                  int el_size, DataBuffer* db,
+                                  Instruction* inst, ReferenceCount* context) {
   data_memory_->Load(address_db, mask_db, el_size, db, inst, context);
 }
 
 // Untagged store.
-void TaggedFlatDemandMemory::Store(uint64_t address, DataBuffer *db) {
+void TaggedFlatDemandMemory::Store(uint64_t address, DataBuffer* db) {
   data_memory_->Store(address, db);
   // Clear any affected tags.
   ClearTags(address, db->size<uint8_t>());
 }
 
 // Untagged vector store.
-void TaggedFlatDemandMemory::Store(DataBuffer *address_db, DataBuffer *mask_db,
-                                   int el_size, DataBuffer *db) {
+void TaggedFlatDemandMemory::Store(DataBuffer* address_db, DataBuffer* mask_db,
+                                   int el_size, DataBuffer* db) {
   unsigned num_stores = address_db->size<uint64_t>();
   if (num_stores == 0) return;
   unsigned store_size = db->size<uint8_t>() / num_stores;
@@ -123,8 +123,8 @@
 }
 
 bool TaggedFlatDemandMemory::CheckRequest(uint64_t address,
-                                          const DataBuffer *db,
-                                          const DataBuffer *tags) {
+                                          const DataBuffer* db,
+                                          const DataBuffer* tags) {
   uint64_t mask = (1ULL << tag_granule_shift_) - 1;
   if (address & mask) {
     LOG(ERROR) << absl::StrCat(
@@ -150,8 +150,8 @@
   return true;
 }
 
-void TaggedFlatDemandMemory::FinishLoad(int latency, Instruction *inst,
-                                        ReferenceCount *context) {
+void TaggedFlatDemandMemory::FinishLoad(int latency, Instruction* inst,
+                                        ReferenceCount* context) {
   if (inst == nullptr) return;
   // If the latency is 0, execute the instruction immediately.
   if (latency == 0) {
@@ -176,7 +176,7 @@
   uint64_t lo = address >> tag_granule_shift_;
   uint64_t hi = (address + size - 1) >> tag_granule_shift_;
   int num_tags = hi - lo + 1;
-  auto *tag_db = db_factory_->Allocate(num_tags);
+  auto* tag_db = db_factory_->Allocate(num_tags);
   std::memset(tag_db->raw_ptr(), 0, num_tags);
   tag_memory_->Store(lo, tag_db);
   tag_db->DecRef();
diff --git a/mpact/sim/util/memory/tagged_flat_demand_memory.h b/mpact/sim/util/memory/tagged_flat_demand_memory.h
index 58e4234..1c7bbf1 100644
--- a/mpact/sim/util/memory/tagged_flat_demand_memory.h
+++ b/mpact/sim/util/memory/tagged_flat_demand_memory.h
@@ -72,8 +72,8 @@
   ~TaggedFlatDemandMemory() override;
   // Disabled constructors and operator.
   TaggedFlatDemandMemory() = delete;
-  TaggedFlatDemandMemory(const TaggedFlatDemandMemory &) = delete;
-  TaggedFlatDemandMemory &operator=(const TaggedFlatDemandMemory &) = delete;
+  TaggedFlatDemandMemory(const TaggedFlatDemandMemory&) = delete;
+  TaggedFlatDemandMemory& operator=(const TaggedFlatDemandMemory&) = delete;
 
   // Methods inherited directly from TaggedMemoryInterface.
   // Single address load. Loads the data into data buffer 'db', and accompanying
@@ -81,54 +81,54 @@
   // the size and the address have to be aligned to the tag granule for the
   // memory. Upon completion, and timed according to the latency of 'db', if
   // non-null, 'inst' is executed with context 'context'.
-  void Load(uint64_t address, generic::DataBuffer *db,
-            generic::DataBuffer *tags, generic::Instruction *inst,
-            generic::ReferenceCount *context) override;
-  void Store(uint64_t address, generic::DataBuffer *db,
-             generic::DataBuffer *tags) override;
+  void Load(uint64_t address, generic::DataBuffer* db,
+            generic::DataBuffer* tags, generic::Instruction* inst,
+            generic::ReferenceCount* context) override;
+  void Store(uint64_t address, generic::DataBuffer* db,
+             generic::DataBuffer* tags) override;
   // Methods inherited from MemoryInterface. These methods do not handle tags.
   // Loads are identical to FlatDemandMemory loads.
-  void Load(uint64_t address, generic::DataBuffer *db,
-            generic::Instruction *inst,
-            generic::ReferenceCount *context) override;
-  void Load(generic::DataBuffer *address_db, generic::DataBuffer *mask_db,
-            int el_size, generic::DataBuffer *db, Instruction *inst,
-            generic::ReferenceCount *context) override;
+  void Load(uint64_t address, generic::DataBuffer* db,
+            generic::Instruction* inst,
+            generic::ReferenceCount* context) override;
+  void Load(generic::DataBuffer* address_db, generic::DataBuffer* mask_db,
+            int el_size, generic::DataBuffer* db, Instruction* inst,
+            generic::ReferenceCount* context) override;
   // Convenience template function that calls the above function with the
   // element size as the sizeof() the template parameter type.
   template <typename T>
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, DataBuffer *db,
-            Instruction *inst, ReferenceCount *context) {
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, DataBuffer* db,
+            Instruction* inst, ReferenceCount* context) {
     Load(address_db, mask_db, sizeof(T), db, inst, context);
   }
   // Store methods inherited from MemoryInterface. These methods do not handle
   // tags. Instead, tags are cleared for any part of memory that is written to.
-  void Store(uint64_t address, DataBuffer *db) override;
-  void Store(generic::DataBuffer *address_db, generic::DataBuffer *mask_db,
-             int el_size, generic::DataBuffer *db) override;
+  void Store(uint64_t address, DataBuffer* db) override;
+  void Store(generic::DataBuffer* address_db, generic::DataBuffer* mask_db,
+             int el_size, generic::DataBuffer* db) override;
   // Convenience template function that calls the above function with the
   // element size as the sizeof() the template parameter type.
   template <typename T>
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, DataBuffer *db) {
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, DataBuffer* db) {
     Store(address_db, mask_db, sizeof(T), db);
   }
 
  private:
   // Check that the tagged load or store is properly aligned to the tag
   // granule, and that the number of tags provided is correct.
-  bool CheckRequest(uint64_t address, const generic::DataBuffer *db,
-                    const generic::DataBuffer *tags);
+  bool CheckRequest(uint64_t address, const generic::DataBuffer* db,
+                    const generic::DataBuffer* tags);
   // Complete the load
-  void FinishLoad(int latency, generic::Instruction *inst,
-                  generic::ReferenceCount *context);
+  void FinishLoad(int latency, generic::Instruction* inst,
+                  generic::ReferenceCount* context);
   // Clear the tags for the specified range of memory.
   void ClearTags(uint64_t address, unsigned size);
 
   unsigned tag_granule_;
   unsigned tag_granule_shift_;
-  FlatDemandMemory *data_memory_ = nullptr;
-  FlatDemandMemory *tag_memory_ = nullptr;
-  generic::DataBufferFactory *db_factory_ = nullptr;
+  FlatDemandMemory* data_memory_ = nullptr;
+  FlatDemandMemory* tag_memory_ = nullptr;
+  generic::DataBufferFactory* db_factory_ = nullptr;
 };
 
 }  // namespace util
diff --git a/mpact/sim/util/memory/tagged_memory_interface.h b/mpact/sim/util/memory/tagged_memory_interface.h
index 43a6f36..8eac44b 100644
--- a/mpact/sim/util/memory/tagged_memory_interface.h
+++ b/mpact/sim/util/memory/tagged_memory_interface.h
@@ -38,9 +38,9 @@
   using MemoryInterface::Store;
   virtual ~TaggedMemoryInterface() = default;
   // For now, only support non-vector loads and stores with tags.
-  virtual void Load(uint64_t address, DataBuffer *db, DataBuffer *tags,
-                    Instruction *inst, ReferenceCount *context) = 0;
-  virtual void Store(uint64_t address, DataBuffer *db, DataBuffer *tags) = 0;
+  virtual void Load(uint64_t address, DataBuffer* db, DataBuffer* tags,
+                    Instruction* inst, ReferenceCount* context) = 0;
+  virtual void Store(uint64_t address, DataBuffer* db, DataBuffer* tags) = 0;
 };
 
 }  // namespace util
diff --git a/mpact/sim/util/memory/tagged_memory_watcher.cc b/mpact/sim/util/memory/tagged_memory_watcher.cc
index ecc5966..2e72efd 100644
--- a/mpact/sim/util/memory/tagged_memory_watcher.cc
+++ b/mpact/sim/util/memory/tagged_memory_watcher.cc
@@ -25,7 +25,7 @@
 namespace sim {
 namespace util {
 
-TaggedMemoryWatcher::TaggedMemoryWatcher(TaggedMemoryInterface *memory)
+TaggedMemoryWatcher::TaggedMemoryWatcher(TaggedMemoryInterface* memory)
     : memory_(memory) {}
 
 // Methods to insert store and load watch callbacks. The methods check that
@@ -33,7 +33,7 @@
 // overlapping range in the btree map.
 
 absl::Status TaggedMemoryWatcher::SetStoreWatchCallback(
-    const AddressRange &range, Callback callback) {
+    const AddressRange& range, Callback callback) {
   if (range.start > range.end) {
     return absl::InternalError(absl::StrCat("Illegal store watch range: start ",
                                             absl::Hex(range.start), " > end ",
@@ -60,7 +60,7 @@
 }
 
 absl::Status TaggedMemoryWatcher::SetLoadWatchCallback(
-    const AddressRange &range, Callback callback) {
+    const AddressRange& range, Callback callback) {
   if (range.start > range.end) {
     return absl::InternalError(absl::StrCat("Illegal store watch range: start ",
                                             absl::Hex(range.start), " > end ",
@@ -91,8 +91,8 @@
 // is called before/after the load/store is forwarded to the interface.
 
 // Single address.
-void TaggedMemoryWatcher::Load(uint64_t address, DataBuffer *db,
-                               Instruction *inst, ReferenceCount *context) {
+void TaggedMemoryWatcher::Load(uint64_t address, DataBuffer* db,
+                               Instruction* inst, ReferenceCount* context) {
   if (!ld_watch_actions_.empty()) {
     auto [first_match, last] = ld_watch_actions_.equal_range(
         AddressRange(address, address + db->size<uint8_t>() - 1));
@@ -105,9 +105,9 @@
 }
 
 // Gather load (multiple addresses and a mask vector).
-void TaggedMemoryWatcher::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                               int el_size, DataBuffer *db, Instruction *inst,
-                               ReferenceCount *context) {
+void TaggedMemoryWatcher::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                               int el_size, DataBuffer* db, Instruction* inst,
+                               ReferenceCount* context) {
   if (!ld_watch_actions_.empty()) {
     int num_entries = mask_db->size<bool>();
     auto addresses = address_db->Get<uint64_t>();
@@ -128,9 +128,9 @@
 }
 
 // Tagged memory load.
-void TaggedMemoryWatcher::Load(uint64_t address, DataBuffer *db,
-                               DataBuffer *tags, Instruction *inst,
-                               ReferenceCount *context) {
+void TaggedMemoryWatcher::Load(uint64_t address, DataBuffer* db,
+                               DataBuffer* tags, Instruction* inst,
+                               ReferenceCount* context) {
   if (db != nullptr && !ld_watch_actions_.empty()) {
     auto [first_match, last] = ld_watch_actions_.equal_range(
         AddressRange(address, address + db->size<uint8_t>() - 1));
@@ -143,7 +143,7 @@
 }
 
 // Single address store.
-void TaggedMemoryWatcher::Store(uint64_t address, DataBuffer *db) {
+void TaggedMemoryWatcher::Store(uint64_t address, DataBuffer* db) {
   memory_->Store(address, db);
   if (!st_watch_actions_.empty()) {
     auto [first_match, last] = st_watch_actions_.equal_range(
@@ -156,8 +156,8 @@
 }
 
 // Scatter store (multiple addresses and a mask vector).
-void TaggedMemoryWatcher::Store(DataBuffer *address_db, DataBuffer *mask_db,
-                                int el_size, DataBuffer *db) {
+void TaggedMemoryWatcher::Store(DataBuffer* address_db, DataBuffer* mask_db,
+                                int el_size, DataBuffer* db) {
   memory_->Store(address_db, mask_db, el_size, db);
   if (!st_watch_actions_.empty()) {
     int num_entries = mask_db->size<bool>();
@@ -178,8 +178,8 @@
 }
 
 // Tagged memory store.
-void TaggedMemoryWatcher::Store(uint64_t address, DataBuffer *db,
-                                DataBuffer *tags) {
+void TaggedMemoryWatcher::Store(uint64_t address, DataBuffer* db,
+                                DataBuffer* tags) {
   memory_->Store(address, db, tags);
   if (!st_watch_actions_.empty()) {
     auto [first_match, last] = st_watch_actions_.equal_range(
diff --git a/mpact/sim/util/memory/tagged_memory_watcher.h b/mpact/sim/util/memory/tagged_memory_watcher.h
index a4f4174..5045b09 100644
--- a/mpact/sim/util/memory/tagged_memory_watcher.h
+++ b/mpact/sim/util/memory/tagged_memory_watcher.h
@@ -54,11 +54,11 @@
   using Callback = absl::AnyInvocable<void(uint64_t, int)>;
 
   // Constructor - default constructor is disabled. Use default destructor.
-  explicit TaggedMemoryWatcher(TaggedMemoryInterface *memory);
+  explicit TaggedMemoryWatcher(TaggedMemoryInterface* memory);
   TaggedMemoryWatcher() = delete;
-  TaggedMemoryWatcher(const TaggedMemoryWatcher &) =
+  TaggedMemoryWatcher(const TaggedMemoryWatcher&) =
       delete;  // no copy constructor.
-  TaggedMemoryWatcher &operator=(const TaggedMemoryWatcher &) =
+  TaggedMemoryWatcher& operator=(const TaggedMemoryWatcher&) =
       delete;  // no assignment.
   ~TaggedMemoryWatcher() override = default;
 
@@ -67,38 +67,38 @@
   // Since there cannot be any overlapping ranges, it is only necessary to
   // specify a single address for the clear call, as it will map to the range
   // that contains it.
-  absl::Status SetStoreWatchCallback(const AddressRange &range,
+  absl::Status SetStoreWatchCallback(const AddressRange& range,
                                      Callback callback);
   absl::Status ClearStoreWatchCallback(uint64_t address);
-  absl::Status SetLoadWatchCallback(const AddressRange &range,
+  absl::Status SetLoadWatchCallback(const AddressRange& range,
                                     Callback callback);
   absl::Status ClearLoadWatchCallback(uint64_t address);
 
   // The memory interface methods.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Store(uint64_t address, DataBuffer *db) override;
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override;
-  void Load(uint64_t address, DataBuffer *db, DataBuffer *tags,
-            Instruction *inst, ReferenceCount *context) override;
-  void Store(uint64_t address, DataBuffer *db, DataBuffer *tags) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Store(uint64_t address, DataBuffer* db) override;
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override;
+  void Load(uint64_t address, DataBuffer* db, DataBuffer* tags,
+            Instruction* inst, ReferenceCount* context) override;
+  void Store(uint64_t address, DataBuffer* db, DataBuffer* tags) override;
 
  private:
   // Comparator used to compare two address ranges. A range is less than another
   // if they do (a) not overlap and (b) the addresses of the first are less than
   // the other.
   struct AddressRangeLess {
-    constexpr bool operator()(const AddressRange &lhs,
-                              const AddressRange &rhs) const {
+    constexpr bool operator()(const AddressRange& lhs,
+                              const AddressRange& rhs) const {
       return lhs.end < rhs.start;
     }
   };
   // The memory interface to forward the loads/stores to.
-  TaggedMemoryInterface *memory_;
+  TaggedMemoryInterface* memory_;
   absl::btree_multimap<AddressRange, Callback, AddressRangeLess>
       ld_watch_actions_;
   absl::btree_multimap<AddressRange, Callback, AddressRangeLess>
diff --git a/mpact/sim/util/memory/tagged_to_untagged_memory_transactor.cc b/mpact/sim/util/memory/tagged_to_untagged_memory_transactor.cc
index d732706..ed08831 100644
--- a/mpact/sim/util/memory/tagged_to_untagged_memory_transactor.cc
+++ b/mpact/sim/util/memory/tagged_to_untagged_memory_transactor.cc
@@ -33,41 +33,41 @@
 using ::mpact::sim::generic::ReferenceCount;
 
 // These methods simply forward the call to the target mem  interface.
-void TaggedToUntaggedMemoryTransactor::Load(uint64_t address, DataBuffer *db,
-                                            Instruction *inst,
-                                            ReferenceCount *context) {
+void TaggedToUntaggedMemoryTransactor::Load(uint64_t address, DataBuffer* db,
+                                            Instruction* inst,
+                                            ReferenceCount* context) {
   target_mem_->Load(address, db, inst, context);
 }
-void TaggedToUntaggedMemoryTransactor::Load(DataBuffer *address_db,
-                                            DataBuffer *mask_db, int el_size,
-                                            DataBuffer *db, Instruction *inst,
-                                            ReferenceCount *context) {
+void TaggedToUntaggedMemoryTransactor::Load(DataBuffer* address_db,
+                                            DataBuffer* mask_db, int el_size,
+                                            DataBuffer* db, Instruction* inst,
+                                            ReferenceCount* context) {
   target_mem_->Load(address_db, mask_db, el_size, db, inst, context);
 }
 
-void TaggedToUntaggedMemoryTransactor::Store(uint64_t address, DataBuffer *db) {
+void TaggedToUntaggedMemoryTransactor::Store(uint64_t address, DataBuffer* db) {
   target_mem_->Store(address, db);
 }
 
-void TaggedToUntaggedMemoryTransactor::Store(DataBuffer *address,
-                                             DataBuffer *mask, int el_size,
-                                             DataBuffer *db) {
+void TaggedToUntaggedMemoryTransactor::Store(DataBuffer* address,
+                                             DataBuffer* mask, int el_size,
+                                             DataBuffer* db) {
   target_mem_->Store(address, mask, el_size, db);
 }
 
 // For tagged loads, zero the tags, and then forward to the target mem
 // interface.
-void TaggedToUntaggedMemoryTransactor::Load(uint64_t address, DataBuffer *db,
-                                            DataBuffer *tags, Instruction *inst,
-                                            ReferenceCount *context) {
+void TaggedToUntaggedMemoryTransactor::Load(uint64_t address, DataBuffer* db,
+                                            DataBuffer* tags, Instruction* inst,
+                                            ReferenceCount* context) {
   std::memset(tags->raw_ptr(), 0, tags->size<uint8_t>());
   if (db == nullptr) return;
   target_mem_->Load(address, db, inst, context);
 }
 
 // For tagged stores, ignore the tags. just forward to the target mem interface.
-void TaggedToUntaggedMemoryTransactor::Store(uint64_t address, DataBuffer *db,
-                                             DataBuffer *tags) {
+void TaggedToUntaggedMemoryTransactor::Store(uint64_t address, DataBuffer* db,
+                                             DataBuffer* tags) {
   if (tags != nullptr) {
     for (auto tag : tags->Get<uint8_t>()) {
       if (tag != 0)
diff --git a/mpact/sim/util/memory/tagged_to_untagged_memory_transactor.h b/mpact/sim/util/memory/tagged_to_untagged_memory_transactor.h
index 45586ee..e9d439c 100644
--- a/mpact/sim/util/memory/tagged_to_untagged_memory_transactor.h
+++ b/mpact/sim/util/memory/tagged_to_untagged_memory_transactor.h
@@ -39,23 +39,23 @@
 // on loads.
 class TaggedToUntaggedMemoryTransactor : public util::TaggedMemoryInterface {
  public:
-  explicit TaggedToUntaggedMemoryTransactor(MemoryInterface *target_mem)
+  explicit TaggedToUntaggedMemoryTransactor(MemoryInterface* target_mem)
       : target_mem_(target_mem) {}
 
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Store(uint64_t address, DataBuffer *db) override;
-  void Store(DataBuffer *address, DataBuffer *mask, int el_size,
-             DataBuffer *db) override;
-  void Load(uint64_t address, DataBuffer *db, DataBuffer *tags,
-            Instruction *inst, ReferenceCount *context) override;
-  void Store(uint64_t address, DataBuffer *db, DataBuffer *tags) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Store(uint64_t address, DataBuffer* db) override;
+  void Store(DataBuffer* address, DataBuffer* mask, int el_size,
+             DataBuffer* db) override;
+  void Load(uint64_t address, DataBuffer* db, DataBuffer* tags,
+            Instruction* inst, ReferenceCount* context) override;
+  void Store(uint64_t address, DataBuffer* db, DataBuffer* tags) override;
 
  private:
-  MemoryInterface *target_mem_;
+  MemoryInterface* target_mem_;
 };
 
 }  // namespace util
diff --git a/mpact/sim/util/memory/test/BUILD b/mpact/sim/util/memory/test/BUILD
index 4d88893..dd4ef95 100644
--- a/mpact/sim/util/memory/test/BUILD
+++ b/mpact/sim/util/memory/test/BUILD
@@ -40,6 +40,7 @@
     deps = [
         "//mpact/sim/generic:arch_state",
         "//mpact/sim/generic:core",
+        "//mpact/sim/generic:instruction",
         "//mpact/sim/util/memory",
         "@com_google_absl//absl/strings",
         "@com_google_googletest//:gtest",
diff --git a/mpact/sim/util/memory/test/atomic_memory_test.cc b/mpact/sim/util/memory/test/atomic_memory_test.cc
index d1b0fea..d9acefa 100644
--- a/mpact/sim/util/memory/test/atomic_memory_test.cc
+++ b/mpact/sim/util/memory/test/atomic_memory_test.cc
@@ -14,7 +14,10 @@
 
 #include "mpact/sim/util/memory/atomic_memory.h"
 
-#include "googlemock/include/gmock/gmock.h"
+#include <algorithm>
+#include <cstdint>
+
+#include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/data_buffer.h"
 #include "mpact/sim/util/memory/flat_demand_memory.h"
@@ -46,19 +49,19 @@
     delete flat_memory_;
   }
 
-  AtomicMemory *memory_;
-  FlatDemandMemory *flat_memory_;
+  AtomicMemory* memory_;
+  FlatDemandMemory* flat_memory_;
   DataBufferFactory db_factory_;
-  DataBuffer *db_;
+  DataBuffer* db_;
 };
 
 // Test that loads and stores are passed through to the FlatDemandMemory
 // for simple loads and stores.
 TEST_F(AtomicMemoryTest, PassThroughLoadsStores) {
-  DataBuffer *st_db1 = db_factory_.Allocate<uint8_t>(1);
-  DataBuffer *st_db2 = db_factory_.Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = db_factory_.Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = db_factory_.Allocate<uint64_t>(1);
+  DataBuffer* st_db1 = db_factory_.Allocate<uint8_t>(1);
+  DataBuffer* st_db2 = db_factory_.Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = db_factory_.Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = db_factory_.Allocate<uint64_t>(1);
 
   st_db1->Set<uint8_t>(0, 0x0F);
   st_db2->Set<uint16_t>(0, 0xA5A5);
@@ -70,10 +73,10 @@
   memory_->Store(0x1004, st_db4);
   memory_->Store(0x1008, st_db8);
 
-  DataBuffer *ld_db1 = db_factory_.Allocate<uint8_t>(1);
-  DataBuffer *ld_db2 = db_factory_.Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = db_factory_.Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = db_factory_.Allocate<uint64_t>(1);
+  DataBuffer* ld_db1 = db_factory_.Allocate<uint8_t>(1);
+  DataBuffer* ld_db2 = db_factory_.Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = db_factory_.Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = db_factory_.Allocate<uint64_t>(1);
 
   flat_memory_->Load(0x1000, ld_db1, nullptr, nullptr);
   flat_memory_->Load(0x1002, ld_db2, nullptr, nullptr);
@@ -108,7 +111,7 @@
 
 // Test load-linked, store-conditional.
 TEST_F(AtomicMemoryTest, TestLlSc) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -142,8 +145,8 @@
 
 // Test load-linked, store-conditional.
 TEST_F(AtomicMemoryTest, TestLlScFailure) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
-  auto *db2 = db_factory_.Allocate<uint16_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
+  auto* db2 = db_factory_.Allocate<uint16_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   memory_->Store(kBaseAddr, db);
@@ -178,7 +181,7 @@
 
 // Swap
 TEST_F(AtomicMemoryTest, Swap) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -195,7 +198,7 @@
 
 // Add
 TEST_F(AtomicMemoryTest, Add) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -212,7 +215,7 @@
 
 // Subtract
 TEST_F(AtomicMemoryTest, Sub) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -229,7 +232,7 @@
 
 // And
 TEST_F(AtomicMemoryTest, And) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -246,7 +249,7 @@
 
 // Or
 TEST_F(AtomicMemoryTest, Or) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -263,7 +266,7 @@
 
 // Xor
 TEST_F(AtomicMemoryTest, Xor) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -280,7 +283,7 @@
 
 // Max
 TEST_F(AtomicMemoryTest, Max) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -298,7 +301,7 @@
 
 // Maxu
 TEST_F(AtomicMemoryTest, Maxu) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -317,7 +320,7 @@
 
 // Min
 TEST_F(AtomicMemoryTest, Min) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -335,7 +338,7 @@
 
 // Minu
 TEST_F(AtomicMemoryTest, Minu) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
diff --git a/mpact/sim/util/memory/test/atomic_tagged_memory_test.cc b/mpact/sim/util/memory/test/atomic_tagged_memory_test.cc
index 0193a9f..f4fbde9 100644
--- a/mpact/sim/util/memory/test/atomic_tagged_memory_test.cc
+++ b/mpact/sim/util/memory/test/atomic_tagged_memory_test.cc
@@ -14,6 +14,7 @@
 
 #include "mpact/sim/util/memory/atomic_tagged_memory.h"
 
+#include <algorithm>
 #include <cstdint>
 
 #include "googlemock/include/gmock/gmock.h"  // IWYU pragma: keep
@@ -49,19 +50,19 @@
     delete flat_memory_;
   }
 
-  AtomicTaggedMemory *memory_;
-  TaggedFlatDemandMemory *flat_memory_;
+  AtomicTaggedMemory* memory_;
+  TaggedFlatDemandMemory* flat_memory_;
   DataBufferFactory db_factory_;
-  DataBuffer *db_;
+  DataBuffer* db_;
 };
 
 // Test that loads and stores are passed through to the FlatDemandMemory
 // for simple loads and stores.
 TEST_F(AtomicTaggedMemoryTest, PassThroughLoadsStores) {
-  DataBuffer *st_db1 = db_factory_.Allocate<uint8_t>(1);
-  DataBuffer *st_db2 = db_factory_.Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = db_factory_.Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = db_factory_.Allocate<uint64_t>(1);
+  DataBuffer* st_db1 = db_factory_.Allocate<uint8_t>(1);
+  DataBuffer* st_db2 = db_factory_.Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = db_factory_.Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = db_factory_.Allocate<uint64_t>(1);
 
   st_db1->Set<uint8_t>(0, 0x0F);
   st_db2->Set<uint16_t>(0, 0xA5A5);
@@ -73,10 +74,10 @@
   memory_->Store(0x1004, st_db4);
   memory_->Store(0x1008, st_db8);
 
-  DataBuffer *ld_db1 = db_factory_.Allocate<uint8_t>(1);
-  DataBuffer *ld_db2 = db_factory_.Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = db_factory_.Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = db_factory_.Allocate<uint64_t>(1);
+  DataBuffer* ld_db1 = db_factory_.Allocate<uint8_t>(1);
+  DataBuffer* ld_db2 = db_factory_.Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = db_factory_.Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = db_factory_.Allocate<uint64_t>(1);
 
   flat_memory_->Load(0x1000, ld_db1, nullptr, nullptr);
   flat_memory_->Load(0x1002, ld_db2, nullptr, nullptr);
@@ -111,7 +112,7 @@
 
 // Test load-linked, store-conditional.
 TEST_F(AtomicTaggedMemoryTest, TestLlSc) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -145,8 +146,8 @@
 
 // Test load-linked, store-conditional.
 TEST_F(AtomicTaggedMemoryTest, TestLlScFailure) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
-  auto *db2 = db_factory_.Allocate<uint16_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
+  auto* db2 = db_factory_.Allocate<uint16_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   memory_->Store(kBaseAddr, db);
@@ -181,7 +182,7 @@
 
 // Swap
 TEST_F(AtomicTaggedMemoryTest, Swap) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -198,7 +199,7 @@
 
 // Add
 TEST_F(AtomicTaggedMemoryTest, Add) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -215,7 +216,7 @@
 
 // Subtract
 TEST_F(AtomicTaggedMemoryTest, Sub) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -232,7 +233,7 @@
 
 // And
 TEST_F(AtomicTaggedMemoryTest, And) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -249,7 +250,7 @@
 
 // Or
 TEST_F(AtomicTaggedMemoryTest, Or) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -266,7 +267,7 @@
 
 // Xor
 TEST_F(AtomicTaggedMemoryTest, Xor) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -283,7 +284,7 @@
 
 // Max
 TEST_F(AtomicTaggedMemoryTest, Max) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -301,7 +302,7 @@
 
 // Maxu
 TEST_F(AtomicTaggedMemoryTest, Maxu) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -320,7 +321,7 @@
 
 // Min
 TEST_F(AtomicTaggedMemoryTest, Min) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
@@ -338,7 +339,7 @@
 
 // Minu
 TEST_F(AtomicTaggedMemoryTest, Minu) {
-  auto *db = db_factory_.Allocate<uint32_t>(1);
+  auto* db = db_factory_.Allocate<uint32_t>(1);
   // Store a known value to kBaseAddr.
   db->Set<uint32_t>(0, kBaseValue);
   flat_memory_->Store(kBaseAddr, db);
diff --git a/mpact/sim/util/memory/test/cache_test.cc b/mpact/sim/util/memory/test/cache_test.cc
index f6067a1..49468dd 100644
--- a/mpact/sim/util/memory/test/cache_test.cc
+++ b/mpact/sim/util/memory/test/cache_test.cc
@@ -43,23 +43,23 @@
     cache_ = new Cache("cache");
     db_ = db_factory_.Allocate<uint32_t>(1);
     db_->set_latency(0);
-    read_hits_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
+    read_hits_ = reinterpret_cast<SimpleCounter<uint64_t>*>(
         cache_->GetCounter("read_hit"));
-    read_misses_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
+    read_misses_ = reinterpret_cast<SimpleCounter<uint64_t>*>(
         cache_->GetCounter("read_miss"));
-    write_hits_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
+    write_hits_ = reinterpret_cast<SimpleCounter<uint64_t>*>(
         cache_->GetCounter("write_hit"));
-    write_misses_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
+    write_misses_ = reinterpret_cast<SimpleCounter<uint64_t>*>(
         cache_->GetCounter("write_miss"));
-    dirty_line_writebacks_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
+    dirty_line_writebacks_ = reinterpret_cast<SimpleCounter<uint64_t>*>(
         cache_->GetCounter("dirty_line_writeback"));
-    read_arounds_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
+    read_arounds_ = reinterpret_cast<SimpleCounter<uint64_t>*>(
         cache_->GetCounter("read_around"));
-    write_arounds_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
+    write_arounds_ = reinterpret_cast<SimpleCounter<uint64_t>*>(
         cache_->GetCounter("write_around"));
-    read_non_cacheable_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
+    read_non_cacheable_ = reinterpret_cast<SimpleCounter<uint64_t>*>(
         cache_->GetCounter("read_non_cacheable"));
-    write_non_cacheable_ = reinterpret_cast<SimpleCounter<uint64_t> *>(
+    write_non_cacheable_ = reinterpret_cast<SimpleCounter<uint64_t>*>(
         cache_->GetCounter("write_non_cacheable"));
   }
 
@@ -69,17 +69,17 @@
   }
 
   DataBufferFactory db_factory_;
-  DataBuffer *db_;
-  Cache *cache_;
-  SimpleCounter<uint64_t> *read_hits_;
-  SimpleCounter<uint64_t> *read_misses_;
-  SimpleCounter<uint64_t> *write_hits_;
-  SimpleCounter<uint64_t> *write_misses_;
-  SimpleCounter<uint64_t> *dirty_line_writebacks_;
-  SimpleCounter<uint64_t> *read_arounds_;
-  SimpleCounter<uint64_t> *write_arounds_;
-  SimpleCounter<uint64_t> *read_non_cacheable_;
-  SimpleCounter<uint64_t> *write_non_cacheable_;
+  DataBuffer* db_;
+  Cache* cache_;
+  SimpleCounter<uint64_t>* read_hits_;
+  SimpleCounter<uint64_t>* read_misses_;
+  SimpleCounter<uint64_t>* write_hits_;
+  SimpleCounter<uint64_t>* write_misses_;
+  SimpleCounter<uint64_t>* dirty_line_writebacks_;
+  SimpleCounter<uint64_t>* read_arounds_;
+  SimpleCounter<uint64_t>* write_arounds_;
+  SimpleCounter<uint64_t>* read_non_cacheable_;
+  SimpleCounter<uint64_t>* write_non_cacheable_;
   SimpleCounter<uint64_t> cycle_counter_;
 };
 
@@ -196,10 +196,10 @@
   cache_->set_memory(&memory);
   CHECK_OK(cache_->Configure("1k,16,1,true", &cycle_counter_));
 
-  DataBuffer *st_db1 = db_factory_.Allocate<uint8_t>(1);
-  DataBuffer *st_db2 = db_factory_.Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = db_factory_.Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = db_factory_.Allocate<uint64_t>(1);
+  DataBuffer* st_db1 = db_factory_.Allocate<uint8_t>(1);
+  DataBuffer* st_db2 = db_factory_.Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = db_factory_.Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = db_factory_.Allocate<uint64_t>(1);
 
   st_db1->Set<uint8_t>(0, 0x0F);
   st_db2->Set<uint16_t>(0, 0xA5A5);
@@ -211,10 +211,10 @@
   cache_->Store(0x1004, st_db4);
   cache_->Store(0x1008, st_db8);
 
-  DataBuffer *ld_db1 = db_factory_.Allocate<uint8_t>(1);
-  DataBuffer *ld_db2 = db_factory_.Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = db_factory_.Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = db_factory_.Allocate<uint64_t>(1);
+  DataBuffer* ld_db1 = db_factory_.Allocate<uint8_t>(1);
+  DataBuffer* ld_db2 = db_factory_.Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = db_factory_.Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = db_factory_.Allocate<uint64_t>(1);
 
   ld_db1->set_latency(0);
   ld_db2->set_latency(0);
@@ -247,10 +247,10 @@
   cache_->set_tagged_memory(&memory);
   CHECK_OK(cache_->Configure("1k,16,1,true", &cycle_counter_));
 
-  DataBuffer *ld_data_db = db_factory_.Allocate<uint8_t>(kTagGranule * 16);
-  DataBuffer *ld_tag_db = db_factory_.Allocate<uint8_t>(16);
-  DataBuffer *st_data_db = db_factory_.Allocate<uint8_t>(kTagGranule * 16);
-  DataBuffer *st_tag_db = db_factory_.Allocate<uint8_t>(16);
+  DataBuffer* ld_data_db = db_factory_.Allocate<uint8_t>(kTagGranule * 16);
+  DataBuffer* ld_tag_db = db_factory_.Allocate<uint8_t>(16);
+  DataBuffer* st_data_db = db_factory_.Allocate<uint8_t>(kTagGranule * 16);
+  DataBuffer* st_tag_db = db_factory_.Allocate<uint8_t>(16);
   ld_data_db->set_latency(0);
   ld_tag_db->set_latency(0);
 
diff --git a/mpact/sim/util/memory/test/dummy_memory.h b/mpact/sim/util/memory/test/dummy_memory.h
index b74c901..c43fe6f 100644
--- a/mpact/sim/util/memory/test/dummy_memory.h
+++ b/mpact/sim/util/memory/test/dummy_memory.h
@@ -30,38 +30,38 @@
 
   // Memory interface methods.
   // Plain load.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override {
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override {
     load_address_ = address;
   }
   // Vector load.
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override {
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override {
     vector_load_address_ = address_db->Get<uint64_t>(0);
   }
   // Tagged load.
-  void Load(uint64_t address, DataBuffer *db, DataBuffer *tags,
-            Instruction *inst, ReferenceCount *context) override {
+  void Load(uint64_t address, DataBuffer* db, DataBuffer* tags,
+            Instruction* inst, ReferenceCount* context) override {
     tagged_load_address_ = address;
   }
   // Plain store.
-  void Store(uint64_t address, DataBuffer *db) override {
+  void Store(uint64_t address, DataBuffer* db) override {
     store_address_ = address;
   }
   // Vector store.
-  void Store(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override {
+  void Store(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override {
     vector_store_address_ = address_db->Get<uint64_t>(0);
   }
   // Tagged store.
-  void Store(uint64_t address, DataBuffer *db, DataBuffer *tags) override {
+  void Store(uint64_t address, DataBuffer* db, DataBuffer* tags) override {
     tagged_store_address_ = address;
   }
   // Atomic memory operation.
-  absl::Status PerformMemoryOp(uint64_t address, Operation op, DataBuffer *db,
-                               Instruction *inst,
-                               ReferenceCount *context) override {
+  absl::Status PerformMemoryOp(uint64_t address, Operation op, DataBuffer* db,
+                               Instruction* inst,
+                               ReferenceCount* context) override {
     memory_op_address_ = address;
     return absl::OkStatus();
   }
diff --git a/mpact/sim/util/memory/test/flat_demand_memory_test.cc b/mpact/sim/util/memory/test/flat_demand_memory_test.cc
index c432cf9..b68c040 100644
--- a/mpact/sim/util/memory/test/flat_demand_memory_test.cc
+++ b/mpact/sim/util/memory/test/flat_demand_memory_test.cc
@@ -42,15 +42,15 @@
   FlatDemandMemoryTest() { arch_state_ = new MyArchState("TestArchitecture"); }
   ~FlatDemandMemoryTest() override { delete arch_state_; }
 
-  MyArchState *arch_state_;
+  MyArchState* arch_state_;
 };
 
 TEST_F(FlatDemandMemoryTest, BasicLoadStore) {
   auto mem = std::make_unique<FlatDemandMemory>();
-  DataBuffer *st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
 
   st_db1->Set<uint8_t>(0, 0x0F);
   st_db2->Set<uint16_t>(0, 0xA5A5);
@@ -62,10 +62,10 @@
   mem->Store(0x1004, st_db4);
   mem->Store(0x1008, st_db8);
 
-  DataBuffer *ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
   ld_db1->set_latency(0);
   ld_db2->set_latency(0);
   ld_db4->set_latency(0);
@@ -95,15 +95,15 @@
 TEST_F(FlatDemandMemoryTest, SpanningLoadStore) {
   auto mem = std::make_unique<FlatDemandMemory>();
 
-  DataBuffer *st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
 
-  DataBuffer *ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
   ld_db1->set_latency(0);
   ld_db2->set_latency(0);
   ld_db4->set_latency(0);
@@ -142,11 +142,11 @@
 TEST_F(FlatDemandMemoryTest, MultiLoadUnitStride) {
   auto mem = std::make_unique<FlatDemandMemory>(1024, 0x1000, 1, 0);
 
-  DataBuffer *address_db = arch_state_->db_factory()->Allocate<uint64_t>(1);
-  DataBuffer *mask_db = arch_state_->db_factory()->Allocate<bool>(4);
-  DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  DataBuffer* address_db = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* mask_db = arch_state_->db_factory()->Allocate<bool>(4);
+  DataBuffer* ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
   ld_db->set_latency(0);
-  DataBuffer *st_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  DataBuffer* st_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
   auto ld_span = ld_db->Get<uint32_t>();
   auto st_span = st_db->Get<uint32_t>();
   auto mask_span = mask_db->Get<bool>();
@@ -166,9 +166,9 @@
 
 TEST_F(FlatDemandMemoryTest, HalfWordAddressable) {
   auto mem = std::make_unique<FlatDemandMemory>(0x4000, 0x1000, 2, 0);
-  DataBuffer *st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
 
   st_db2->Set<uint16_t>(0, 0xA5A5);
   st_db4->Set<uint32_t>(0, 0xDEADBEEF);
@@ -178,9 +178,9 @@
   mem->Store(0x1001, st_db4);
   mem->Store(0x1003, st_db8);
 
-  DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
   ld_db2->set_latency(0);
   ld_db4->set_latency(0);
   ld_db8->set_latency(0);
@@ -204,10 +204,10 @@
 
 TEST_F(FlatDemandMemoryTest, LargeBlockOfMemory) {
   auto mem = std::make_unique<FlatDemandMemory>();
-  DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint8_t>(
+  DataBuffer* ld_db = arch_state_->db_factory()->Allocate<uint8_t>(
       FlatDemandMemory::kAllocationSize * 2);
   ld_db->set_latency(0);
-  DataBuffer *st_db = arch_state_->db_factory()->Allocate<uint8_t>(
+  DataBuffer* st_db = arch_state_->db_factory()->Allocate<uint8_t>(
       FlatDemandMemory::kAllocationSize * 2);
   // Set the store data to known value.
   std::memset(st_db->raw_ptr(), 0xbe, FlatDemandMemory::kAllocationSize * 2);
diff --git a/mpact/sim/util/memory/test/flat_memory_test.cc b/mpact/sim/util/memory/test/flat_memory_test.cc
index 7e248b2..d4d5251 100644
--- a/mpact/sim/util/memory/test/flat_memory_test.cc
+++ b/mpact/sim/util/memory/test/flat_memory_test.cc
@@ -22,6 +22,9 @@
 #include "googletest/include/gtest/gtest.h"
 #include "mpact/sim/generic/arch_state.h"
 #include "mpact/sim/generic/data_buffer.h"
+#include "mpact/sim/generic/instruction.h"
+#include "mpact/sim/generic/operand_interface.h"
+#include "mpact/sim/generic/ref_count.h"
 
 namespace mpact {
 namespace sim {
@@ -32,14 +35,14 @@
 
 struct InstructionContext : public generic::ReferenceCount {
  public:
-  uint32_t *value;
+  uint32_t* value;
 };
 
 // Define a class that derives from ArchState since constructors are
 // protected.
 class MyArchState : public generic::ArchState {
  public:
-  MyArchState(absl::string_view id, generic::SourceOperandInterface *pc_op)
+  MyArchState(absl::string_view id, generic::SourceOperandInterface* pc_op)
       : ArchState(id, pc_op) {}
   explicit MyArchState(absl::string_view id) : MyArchState(id, nullptr) {}
 };
@@ -50,7 +53,7 @@
   FlatMemoryTest() { arch_state_ = new MyArchState("TestArchitecture"); }
   ~FlatMemoryTest() override { delete arch_state_; }
 
-  MyArchState *arch_state_;
+  MyArchState* arch_state_;
 };
 
 // Verify that size and base address are correct when created.
@@ -71,10 +74,10 @@
 TEST_F(FlatMemoryTest, SimpleStoreLoad) {
   auto mem = std::make_unique<FlatMemory>(1024, 0x1000, 1, 0);
 
-  DataBuffer *st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
 
   st_db1->Set<uint8_t>(0, 0x0F);
   st_db2->Set<uint16_t>(0, 0xA5A5);
@@ -86,10 +89,10 @@
   mem->Store(0x1004, st_db4);
   mem->Store(0x1008, st_db8);
 
-  DataBuffer *ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
 
   mem->Load(0x1000, ld_db1, nullptr, nullptr);
   mem->Load(0x1002, ld_db2, nullptr, nullptr);
@@ -117,11 +120,11 @@
 TEST_F(FlatMemoryTest, MultiAddressLoadStore) {
   auto mem = std::make_unique<FlatMemory>(1024, 0x1000, 1, 0);
 
-  DataBuffer *address_db = arch_state_->db_factory()->Allocate<uint64_t>(4);
-  DataBuffer *mask_db = arch_state_->db_factory()->Allocate<bool>(4);
-  DataBuffer *store_data_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
-  DataBuffer *load_data_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
-  DataBuffer *load_data2_db = arch_state_->db_factory()->Allocate<uint32_t>(8);
+  DataBuffer* address_db = arch_state_->db_factory()->Allocate<uint64_t>(4);
+  DataBuffer* mask_db = arch_state_->db_factory()->Allocate<bool>(4);
+  DataBuffer* store_data_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  DataBuffer* load_data_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  DataBuffer* load_data2_db = arch_state_->db_factory()->Allocate<uint32_t>(8);
 
   // Should load zeros's into load_data_db
   mem->Load(0x1000, load_data_db, nullptr, nullptr);
@@ -188,14 +191,14 @@
   auto context = new InstructionContext();
   auto inst = std::make_unique<Instruction>(arch_state_);
   int data = 0;
-  inst->set_semantic_function([&](Instruction *instruction) {
+  inst->set_semantic_function([&](Instruction* instruction) {
     EXPECT_EQ(inst.get(), instruction);
-    EXPECT_EQ(instruction->context(), static_cast<ReferenceCount *>(context));
+    EXPECT_EQ(instruction->context(), static_cast<ReferenceCount*>(context));
     data++;
   });
   auto mem = std::make_unique<FlatMemory>(1024, 0x1000, 1, 0);
 
-  DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* ld_db = arch_state_->db_factory()->Allocate<uint32_t>(1);
 
   // Set latency to zero so that the instruction semantic function in inst is
   // executed immediately.
@@ -222,16 +225,16 @@
   auto context = new InstructionContext();
   auto inst = std::make_unique<Instruction>(arch_state_);
   int data = 0;
-  inst->set_semantic_function([&](Instruction *instruction) {
+  inst->set_semantic_function([&](Instruction* instruction) {
     EXPECT_EQ(inst.get(), instruction);
-    EXPECT_EQ(instruction->context(), static_cast<ReferenceCount *>(context));
+    EXPECT_EQ(instruction->context(), static_cast<ReferenceCount*>(context));
     data++;
   });
   auto mem = std::make_unique<FlatMemory>(1024, 0x1000, 1, 0);
 
-  DataBuffer *address_db = arch_state_->db_factory()->Allocate<uint64_t>(4);
-  DataBuffer *mask_db = arch_state_->db_factory()->Allocate<bool>(4);
-  DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  DataBuffer* address_db = arch_state_->db_factory()->Allocate<uint64_t>(4);
+  DataBuffer* mask_db = arch_state_->db_factory()->Allocate<bool>(4);
+  DataBuffer* ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
 
   // Set up addresses and mask values.
   for (int index = 0; index < 4; index++) {
@@ -264,10 +267,10 @@
 TEST_F(FlatMemoryTest, MultiLoadUnitStride) {
   auto mem = std::make_unique<FlatMemory>(1024, 0x1000, 1, 0);
 
-  DataBuffer *address_db = arch_state_->db_factory()->Allocate<uint64_t>(1);
-  DataBuffer *mask_db = arch_state_->db_factory()->Allocate<bool>(4);
-  DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
-  DataBuffer *st_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  DataBuffer* address_db = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* mask_db = arch_state_->db_factory()->Allocate<bool>(4);
+  DataBuffer* ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  DataBuffer* st_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
   auto ld_span = ld_db->Get<uint32_t>();
   auto st_span = st_db->Get<uint32_t>();
   auto mask_span = mask_db->Get<bool>();
@@ -288,10 +291,10 @@
 TEST_F(FlatMemoryTest, WordAddressableMemory) {
   auto mem = std::make_unique<FlatMemory>(1024, 0x1000, 4, 0);
   // Allocate data buffers for store data.
-  DataBuffer *st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
   // Initialize values to be stored.
   st_db1->Set<uint8_t>(0, 0x0F);
   st_db2->Set<uint16_t>(0, 0xA5A5);
@@ -303,10 +306,10 @@
   mem->Store(0x1002, st_db4);
   mem->Store(0x1003, st_db8);
   // Allocate data buffers for load data.
-  DataBuffer *ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
   // Perform loads from the adjacent addresses in memory.
   mem->Load(0x1000, ld_db1, nullptr, nullptr);
   mem->Load(0x1001, ld_db2, nullptr, nullptr);
diff --git a/mpact/sim/util/memory/test/memory_router_test.cc b/mpact/sim/util/memory/test/memory_router_test.cc
index 5878e7f..b3c6c26 100644
--- a/mpact/sim/util/memory/test/memory_router_test.cc
+++ b/mpact/sim/util/memory/test/memory_router_test.cc
@@ -40,14 +40,14 @@
 TEST(MemoryRouterTest, AddInitiator) {
   auto memory_router = std::make_unique<MemoryRouter>();
   // Add initiator.
-  auto *memory_initiator0 = memory_router->AddMemoryInitiator("initiator0");
+  auto* memory_initiator0 = memory_router->AddMemoryInitiator("initiator0");
   // Try to add a second initiator with the same name.
-  auto *memory_initiator1 = memory_router->AddMemoryInitiator("initiator0");
+  auto* memory_initiator1 = memory_router->AddMemoryInitiator("initiator0");
   // They should be the same object.
   EXPECT_EQ(memory_initiator0, memory_initiator1);
 
   // Add tagged initiator by the same name - it should also be the same object.
-  auto *tagged_initiator = memory_router->AddTaggedInitiator("initiator0");
+  auto* tagged_initiator = memory_router->AddTaggedInitiator("initiator0");
   // Since the types are different, make sure that the pointers point to the
   // same area within the size of SingleInitiatorRouter.
   uint64_t p0 = reinterpret_cast<uint64_t>(memory_initiator0);
@@ -56,7 +56,7 @@
               ((p1 >= p0) && (p1 < p0 + sizeof(SingleInitiatorRouter))));
 
   // Add atomic initiator by the same name - it should also be the same object.
-  auto *atomic_initiator = memory_router->AddAtomicInitiator("initiator0");
+  auto* atomic_initiator = memory_router->AddAtomicInitiator("initiator0");
   // Since the types are different, make sure that the pointers point to the
   // same area within the size of SingleInitiatorRouter.
   p0 = reinterpret_cast<uint64_t>(tagged_initiator);
@@ -71,37 +71,36 @@
   // Add memory target.
   EXPECT_TRUE(memory_router
                   ->AddTarget("memory_target",
-                              static_cast<MemoryInterface *>(memory.get()))
+                              static_cast<MemoryInterface*>(memory.get()))
                   .ok());
   // Try adding it again, for each interface. It should fail.
   EXPECT_FALSE(memory_router
                    ->AddTarget("memory_target",
-                               static_cast<MemoryInterface *>(memory.get()))
+                               static_cast<MemoryInterface*>(memory.get()))
                    .ok());
   EXPECT_FALSE(
       memory_router
           ->AddTarget("memory_target",
-                      static_cast<TaggedMemoryInterface *>(memory.get()))
+                      static_cast<TaggedMemoryInterface*>(memory.get()))
           .ok());
   EXPECT_FALSE(
       memory_router
           ->AddTarget("memory_target",
-                      static_cast<AtomicMemoryOpInterface *>(memory.get()))
+                      static_cast<AtomicMemoryOpInterface*>(memory.get()))
           .ok());
   // Add the memory target with different names. This should work.
   EXPECT_TRUE(memory_router
                   ->AddTarget("memory_target_2",
-                              static_cast<MemoryInterface *>(memory.get()))
+                              static_cast<MemoryInterface*>(memory.get()))
+                  .ok());
+  EXPECT_TRUE(memory_router
+                  ->AddTarget("tagged_target",
+                              static_cast<TaggedMemoryInterface*>(memory.get()))
                   .ok());
   EXPECT_TRUE(
       memory_router
-          ->AddTarget("tagged_target",
-                      static_cast<TaggedMemoryInterface *>(memory.get()))
-          .ok());
-  EXPECT_TRUE(
-      memory_router
           ->AddTarget("atomic_target",
-                      static_cast<AtomicMemoryOpInterface *>(memory.get()))
+                      static_cast<AtomicMemoryOpInterface*>(memory.get()))
           .ok());
 }
 
@@ -112,7 +111,7 @@
   (void)memory_router->AddMemoryInitiator("initiator");
   EXPECT_TRUE(
       memory_router
-          ->AddTarget("mem", static_cast<MemoryInterface *>(memory.get()))
+          ->AddTarget("mem", static_cast<MemoryInterface*>(memory.get()))
           .ok());
   EXPECT_TRUE(
       memory_router->AddMapping("initiator", "mem", 0x1000, 0x1fff).ok());
@@ -131,19 +130,19 @@
   // Create a router with 2 initiators and 2 memory targets. With different
   // mappings for each initiator.
   DataBufferFactory factory;
-  auto *db = factory.Allocate<uint32_t>(1);
+  auto* db = factory.Allocate<uint32_t>(1);
   auto memory_router = std::make_unique<MemoryRouter>();
   auto memory0 = std::make_unique<DummyMemory>();
   auto memory1 = std::make_unique<DummyMemory>();
-  auto *initiator0 = memory_router->AddMemoryInitiator("initiator0");
-  auto *initiator1 = memory_router->AddMemoryInitiator("initiator1");
+  auto* initiator0 = memory_router->AddMemoryInitiator("initiator0");
+  auto* initiator1 = memory_router->AddMemoryInitiator("initiator1");
   EXPECT_TRUE(
       memory_router
-          ->AddTarget("mem0", static_cast<MemoryInterface *>(memory0.get()))
+          ->AddTarget("mem0", static_cast<MemoryInterface*>(memory0.get()))
           .ok());
   EXPECT_TRUE(
       memory_router
-          ->AddTarget("mem1", static_cast<MemoryInterface *>(memory1.get()))
+          ->AddTarget("mem1", static_cast<MemoryInterface*>(memory1.get()))
           .ok());
   EXPECT_TRUE(
       memory_router->AddMapping("initiator0", "mem0", 0x1000, 0x1fff).ok());
diff --git a/mpact/sim/util/memory/test/memory_watcher_test.cc b/mpact/sim/util/memory/test/memory_watcher_test.cc
index d4d9850..5c4c175 100644
--- a/mpact/sim/util/memory/test/memory_watcher_test.cc
+++ b/mpact/sim/util/memory/test/memory_watcher_test.cc
@@ -42,8 +42,8 @@
   }
 
   DataBufferFactory db_factory_;
-  MemoryWatcher *watcher_;
-  FlatDemandMemory *memory_;
+  MemoryWatcher* watcher_;
+  FlatDemandMemory* memory_;
 };
 
 // This tests if status is ok when setting non overlapping ranges.
@@ -161,10 +161,10 @@
                       })
                   .ok());
 
-  DataBuffer *db1 = db_factory_.Allocate<uint8_t>(1);
-  DataBuffer *db2 = db_factory_.Allocate<uint16_t>(1);
-  DataBuffer *db4 = db_factory_.Allocate<uint32_t>(1);
-  DataBuffer *db8 = db_factory_.Allocate<uint64_t>(1);
+  DataBuffer* db1 = db_factory_.Allocate<uint8_t>(1);
+  DataBuffer* db2 = db_factory_.Allocate<uint16_t>(1);
+  DataBuffer* db4 = db_factory_.Allocate<uint32_t>(1);
+  DataBuffer* db8 = db_factory_.Allocate<uint64_t>(1);
 
   // First ensure that the store doesn't trigger a callback.
   watcher_->Store(0x1000, db8);
@@ -232,9 +232,9 @@
                       })
                   .ok());
 
-  DataBuffer *address_db = db_factory_.Allocate<uint64_t>(4);
-  DataBuffer *mask_db = db_factory_.Allocate<bool>(4);
-  DataBuffer *data_db = db_factory_.Allocate<uint32_t>(4);
+  DataBuffer* address_db = db_factory_.Allocate<uint64_t>(4);
+  DataBuffer* mask_db = db_factory_.Allocate<bool>(4);
+  DataBuffer* data_db = db_factory_.Allocate<uint32_t>(4);
 
   auto address_span = address_db->Get<uint64_t>();
   auto mask_span = mask_db->Get<bool>();
@@ -302,10 +302,10 @@
                       })
                   .ok());
 
-  DataBuffer *db1 = db_factory_.Allocate<uint8_t>(1);
-  DataBuffer *db2 = db_factory_.Allocate<uint16_t>(1);
-  DataBuffer *db4 = db_factory_.Allocate<uint32_t>(1);
-  DataBuffer *db8 = db_factory_.Allocate<uint64_t>(1);
+  DataBuffer* db1 = db_factory_.Allocate<uint8_t>(1);
+  DataBuffer* db2 = db_factory_.Allocate<uint16_t>(1);
+  DataBuffer* db4 = db_factory_.Allocate<uint32_t>(1);
+  DataBuffer* db8 = db_factory_.Allocate<uint64_t>(1);
 
   // No callbacks for a load.
   watcher_->Load(0x1000, db8, nullptr, nullptr);
@@ -372,9 +372,9 @@
                       })
                   .ok());
 
-  DataBuffer *address_db = db_factory_.Allocate<uint64_t>(4);
-  DataBuffer *mask_db = db_factory_.Allocate<bool>(4);
-  DataBuffer *data_db = db_factory_.Allocate<uint32_t>(4);
+  DataBuffer* address_db = db_factory_.Allocate<uint64_t>(4);
+  DataBuffer* mask_db = db_factory_.Allocate<bool>(4);
+  DataBuffer* data_db = db_factory_.Allocate<uint32_t>(4);
 
   auto address_span = address_db->Get<uint64_t>();
   auto mask_span = mask_db->Get<bool>();
diff --git a/mpact/sim/util/memory/test/single_initiator_router_test.cc b/mpact/sim/util/memory/test/single_initiator_router_test.cc
index 30ec9cb..3cac2b3 100644
--- a/mpact/sim/util/memory/test/single_initiator_router_test.cc
+++ b/mpact/sim/util/memory/test/single_initiator_router_test.cc
@@ -40,11 +40,11 @@
   DataBufferFactory db_factory;
   auto router = std::make_unique<SingleInitiatorRouter>("test");
   auto memory = std::make_unique<DummyMemory>();
-  auto *memory_target = static_cast<MemoryInterface *>(memory.get());
+  auto* memory_target = static_cast<MemoryInterface*>(memory.get());
 
   EXPECT_TRUE(router->AddTarget(memory_target, 0, 0xffff'ffff'ffff'ffff).ok());
-  auto *db = db_factory.Allocate<uint32_t>(1);
-  auto *tag_db = db_factory.Allocate<uint8_t>(1);
+  auto* db = db_factory.Allocate<uint32_t>(1);
+  auto* tag_db = db_factory.Allocate<uint8_t>(1);
 
   // Verify that only the access on the correct interface call go through.
   router->Load(0x1000, db, nullptr, nullptr);
@@ -73,12 +73,12 @@
   DataBufferFactory db_factory;
   auto router = std::make_unique<SingleInitiatorRouter>("test");
   auto memory = std::make_unique<DummyMemory>();
-  auto *memory_target = static_cast<MemoryInterface *>(memory.get());
+  auto* memory_target = static_cast<MemoryInterface*>(memory.get());
 
   EXPECT_TRUE(router->AddTarget(memory_target, 0, 0xffff'ffff'ffff'ffff).ok());
-  auto *db = db_factory.Allocate<uint32_t>(2);
-  auto *address_db = db_factory.Allocate<uint64_t>(2);
-  auto *mask_db = db_factory.Allocate<uint8_t>(2);
+  auto* db = db_factory.Allocate<uint32_t>(2);
+  auto* address_db = db_factory.Allocate<uint64_t>(2);
+  auto* mask_db = db_factory.Allocate<uint8_t>(2);
   address_db->Set<uint64_t>(0, 0x1000);
   address_db->Set<uint64_t>(1, 0x2000);
   mask_db->Set<uint8_t>(0, 1);
@@ -101,11 +101,11 @@
   DataBufferFactory db_factory;
   auto router = std::make_unique<SingleInitiatorRouter>("test");
   auto tagged = std::make_unique<DummyMemory>();
-  auto *tagged_target = static_cast<TaggedMemoryInterface *>(tagged.get());
+  auto* tagged_target = static_cast<TaggedMemoryInterface*>(tagged.get());
 
   EXPECT_TRUE(router->AddTarget(tagged_target, 0, 0xffff'ffff'ffff'ffff).ok());
-  auto *db = db_factory.Allocate<uint32_t>(1);
-  auto *tag_db = db_factory.Allocate<uint8_t>(1);
+  auto* db = db_factory.Allocate<uint32_t>(1);
+  auto* tag_db = db_factory.Allocate<uint8_t>(1);
   // Verify that only the access on the correct interface call go through.
   router->Load(0x1000, db, nullptr, nullptr);
   EXPECT_EQ(tagged->load_address(), 0x1000);
@@ -135,12 +135,12 @@
   DataBufferFactory db_factory;
   auto router = std::make_unique<SingleInitiatorRouter>("test");
   auto tagged = std::make_unique<DummyMemory>();
-  auto *tagged_target = static_cast<TaggedMemoryInterface *>(tagged.get());
+  auto* tagged_target = static_cast<TaggedMemoryInterface*>(tagged.get());
 
   EXPECT_TRUE(router->AddTarget(tagged_target, 0, 0xffff'ffff'ffff'ffff).ok());
-  auto *db = db_factory.Allocate<uint32_t>(2);
-  auto *address_db = db_factory.Allocate<uint64_t>(2);
-  auto *mask_db = db_factory.Allocate<uint8_t>(2);
+  auto* db = db_factory.Allocate<uint32_t>(2);
+  auto* address_db = db_factory.Allocate<uint64_t>(2);
+  auto* mask_db = db_factory.Allocate<uint8_t>(2);
   address_db->Set<uint64_t>(0, 0x1000);
   address_db->Set<uint64_t>(1, 0x2000);
   mask_db->Set<uint8_t>(0, 1);
@@ -163,10 +163,10 @@
   DataBufferFactory db_factory;
   auto router = std::make_unique<SingleInitiatorRouter>("test");
   auto atomic = std::make_unique<DummyMemory>();
-  auto *atomic_target = static_cast<AtomicMemoryOpInterface *>(atomic.get());
+  auto* atomic_target = static_cast<AtomicMemoryOpInterface*>(atomic.get());
   EXPECT_TRUE(router->AddTarget(atomic_target, 0, 0xffff'ffff'ffff'ffff).ok());
-  auto *db = db_factory.Allocate<uint32_t>(1);
-  auto *tag_db = db_factory.Allocate<uint8_t>(1);
+  auto* db = db_factory.Allocate<uint32_t>(1);
+  auto* tag_db = db_factory.Allocate<uint8_t>(1);
   // These should not update the address.
   router->Load(0x1000, db, nullptr, nullptr);
   EXPECT_EQ(atomic->load_address(), 0);
@@ -195,11 +195,11 @@
   auto memory1 = std::make_unique<DummyMemory>();
   auto memory2 = std::make_unique<DummyMemory>();
   auto default_memory = std::make_unique<DummyMemory>();
-  auto *memory_target0 = static_cast<MemoryInterface *>(memory0.get());
-  auto *memory_target1 = static_cast<MemoryInterface *>(memory1.get());
-  auto *memory_target2 = static_cast<MemoryInterface *>(memory2.get());
-  auto *default_target = static_cast<MemoryInterface *>(default_memory.get());
-  auto *db = db_factory.Allocate<uint32_t>(1);
+  auto* memory_target0 = static_cast<MemoryInterface*>(memory0.get());
+  auto* memory_target1 = static_cast<MemoryInterface*>(memory1.get());
+  auto* memory_target2 = static_cast<MemoryInterface*>(memory2.get());
+  auto* default_target = static_cast<MemoryInterface*>(default_memory.get());
+  auto* db = db_factory.Allocate<uint32_t>(1);
 
   // Add 3 targets at different areas in the memory map.
   EXPECT_TRUE(
@@ -268,13 +268,13 @@
   auto memory1 = std::make_unique<DummyMemory>();
   auto memory2 = std::make_unique<DummyMemory>();
   auto default_memory = std::make_unique<DummyMemory>();
-  auto *memory_target0 = static_cast<TaggedMemoryInterface *>(memory0.get());
-  auto *memory_target1 = static_cast<TaggedMemoryInterface *>(memory1.get());
-  auto *memory_target2 = static_cast<TaggedMemoryInterface *>(memory2.get());
-  auto *default_target =
-      static_cast<TaggedMemoryInterface *>(default_memory.get());
-  auto *db = db_factory.Allocate<uint32_t>(1);
-  auto *tag_db = db_factory.Allocate<uint8_t>(1);
+  auto* memory_target0 = static_cast<TaggedMemoryInterface*>(memory0.get());
+  auto* memory_target1 = static_cast<TaggedMemoryInterface*>(memory1.get());
+  auto* memory_target2 = static_cast<TaggedMemoryInterface*>(memory2.get());
+  auto* default_target =
+      static_cast<TaggedMemoryInterface*>(default_memory.get());
+  auto* db = db_factory.Allocate<uint32_t>(1);
+  auto* tag_db = db_factory.Allocate<uint8_t>(1);
 
   // Add 3 targets at different areas in the memory map.
   EXPECT_TRUE(
@@ -344,12 +344,12 @@
   auto memory0 = std::make_unique<DummyMemory>();
   auto memory1 = std::make_unique<DummyMemory>();
   auto memory2 = std::make_unique<DummyMemory>();
-  auto *memory_target0 = static_cast<MemoryInterface *>(memory0.get());
-  auto *memory_target1 = static_cast<MemoryInterface *>(memory1.get());
-  auto *memory_target2 = static_cast<MemoryInterface *>(memory2.get());
-  auto *address_db = db_factory.Allocate<uint64_t>(2);
-  auto *mask_db = db_factory.Allocate<uint8_t>(2);
-  auto *db = db_factory.Allocate<uint32_t>(2);
+  auto* memory_target0 = static_cast<MemoryInterface*>(memory0.get());
+  auto* memory_target1 = static_cast<MemoryInterface*>(memory1.get());
+  auto* memory_target2 = static_cast<MemoryInterface*>(memory2.get());
+  auto* address_db = db_factory.Allocate<uint64_t>(2);
+  auto* mask_db = db_factory.Allocate<uint8_t>(2);
+  auto* db = db_factory.Allocate<uint32_t>(2);
   mask_db->Set<uint8_t>(0, 1);
   mask_db->Set<uint8_t>(1, 1);
 
@@ -431,12 +431,12 @@
   auto memory0 = std::make_unique<DummyMemory>();
   auto memory1 = std::make_unique<DummyMemory>();
   auto memory2 = std::make_unique<DummyMemory>();
-  auto *tagged_target0 = static_cast<TaggedMemoryInterface *>(memory0.get());
-  auto *tagged_target1 = static_cast<TaggedMemoryInterface *>(memory1.get());
-  auto *tagged_target2 = static_cast<TaggedMemoryInterface *>(memory2.get());
-  auto *address_db = db_factory.Allocate<uint64_t>(2);
-  auto *mask_db = db_factory.Allocate<uint8_t>(2);
-  auto *db = db_factory.Allocate<uint32_t>(2);
+  auto* tagged_target0 = static_cast<TaggedMemoryInterface*>(memory0.get());
+  auto* tagged_target1 = static_cast<TaggedMemoryInterface*>(memory1.get());
+  auto* tagged_target2 = static_cast<TaggedMemoryInterface*>(memory2.get());
+  auto* address_db = db_factory.Allocate<uint64_t>(2);
+  auto* mask_db = db_factory.Allocate<uint8_t>(2);
+  auto* db = db_factory.Allocate<uint32_t>(2);
   mask_db->Set<uint8_t>(0, 1);
   mask_db->Set<uint8_t>(1, 1);
 
@@ -519,12 +519,12 @@
   auto memory1 = std::make_unique<DummyMemory>();
   auto memory2 = std::make_unique<DummyMemory>();
   auto default_memory = std::make_unique<DummyMemory>();
-  auto *atomic_target0 = static_cast<AtomicMemoryOpInterface *>(memory0.get());
-  auto *atomic_target1 = static_cast<AtomicMemoryOpInterface *>(memory1.get());
-  auto *atomic_target2 = static_cast<AtomicMemoryOpInterface *>(memory2.get());
-  auto *default_target =
-      static_cast<AtomicMemoryOpInterface *>(default_memory.get());
-  auto *db = db_factory.Allocate<uint32_t>(1);
+  auto* atomic_target0 = static_cast<AtomicMemoryOpInterface*>(memory0.get());
+  auto* atomic_target1 = static_cast<AtomicMemoryOpInterface*>(memory1.get());
+  auto* atomic_target2 = static_cast<AtomicMemoryOpInterface*>(memory2.get());
+  auto* default_target =
+      static_cast<AtomicMemoryOpInterface*>(default_memory.get());
+  auto* db = db_factory.Allocate<uint32_t>(1);
 
   // Add 3 targets at different areas in the memory map.
   EXPECT_TRUE(
diff --git a/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc b/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc
index 5a40ba9..4e6d912 100644
--- a/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc
+++ b/mpact/sim/util/memory/test/tagged_flat_demand_memory_test.cc
@@ -50,7 +50,7 @@
   }
   ~TaggedFlatDemandMemoryTest() override { delete arch_state_; }
 
-  MyArchState *arch_state_;
+  MyArchState* arch_state_;
 };
 
 // The first set of tests verify that the tagged flat demand memory works just
@@ -58,10 +58,10 @@
 
 TEST_F(TaggedFlatDemandMemoryTest, BasicLoadStore) {
   auto mem = std::make_unique<TaggedFlatDemandMemory>(kTagGranule);
-  DataBuffer *st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
 
   st_db1->Set<uint8_t>(0, 0x0F);
   st_db2->Set<uint16_t>(0, 0xA5A5);
@@ -73,10 +73,10 @@
   mem->Store(0x1004, st_db4);
   mem->Store(0x1008, st_db8);
 
-  DataBuffer *ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
   ld_db1->set_latency(0);
   ld_db2->set_latency(0);
   ld_db4->set_latency(0);
@@ -106,15 +106,15 @@
 TEST_F(TaggedFlatDemandMemoryTest, SpanningLoadStore) {
   auto mem = std::make_unique<TaggedFlatDemandMemory>(kTagGranule);
 
-  DataBuffer *st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* st_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
 
-  DataBuffer *ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
-  DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* ld_db1 = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
   ld_db1->set_latency(0);
   ld_db2->set_latency(0);
   ld_db4->set_latency(0);
@@ -158,11 +158,11 @@
   auto mem =
       std::make_unique<TaggedFlatDemandMemory>(1024, 0x1000, 1, 0, kTagGranule);
 
-  DataBuffer *address_db = arch_state_->db_factory()->Allocate<uint64_t>(1);
-  DataBuffer *mask_db = arch_state_->db_factory()->Allocate<bool>(4);
-  DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  DataBuffer* address_db = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* mask_db = arch_state_->db_factory()->Allocate<bool>(4);
+  DataBuffer* ld_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
   ld_db->set_latency(0);
-  DataBuffer *st_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
+  DataBuffer* st_db = arch_state_->db_factory()->Allocate<uint32_t>(4);
   auto ld_span = ld_db->Get<uint32_t>();
   auto st_span = st_db->Get<uint32_t>();
   auto mask_span = mask_db->Get<bool>();
@@ -183,9 +183,9 @@
 TEST_F(TaggedFlatDemandMemoryTest, HalfWordAddressable) {
   auto mem = std::make_unique<TaggedFlatDemandMemory>(0x4000, 0x1000, 2, 0,
                                                       kTagGranule);
-  DataBuffer *st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* st_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* st_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* st_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
 
   st_db2->Set<uint16_t>(0, 0xA5A5);
   st_db4->Set<uint32_t>(0, 0xDEADBEEF);
@@ -195,9 +195,9 @@
   mem->Store(0x1001, st_db4);
   mem->Store(0x1003, st_db8);
 
-  DataBuffer *ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
-  DataBuffer *ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
-  DataBuffer *ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
+  DataBuffer* ld_db2 = arch_state_->db_factory()->Allocate<uint16_t>(1);
+  DataBuffer* ld_db4 = arch_state_->db_factory()->Allocate<uint32_t>(1);
+  DataBuffer* ld_db8 = arch_state_->db_factory()->Allocate<uint64_t>(1);
   ld_db2->set_latency(0);
   ld_db4->set_latency(0);
   ld_db8->set_latency(0);
@@ -221,9 +221,9 @@
 
 TEST_F(TaggedFlatDemandMemoryTest, LargeBlockOfMemory) {
   auto mem = std::make_unique<TaggedFlatDemandMemory>(kTagGranule);
-  DataBuffer *ld_db = arch_state_->db_factory()->Allocate<uint8_t>(
+  DataBuffer* ld_db = arch_state_->db_factory()->Allocate<uint8_t>(
       TaggedFlatDemandMemory::kAllocationSize * 2);
-  DataBuffer *st_db = arch_state_->db_factory()->Allocate<uint8_t>(
+  DataBuffer* st_db = arch_state_->db_factory()->Allocate<uint8_t>(
       TaggedFlatDemandMemory::kAllocationSize * 2);
   // Set the store data to known value.
   std::memset(st_db->raw_ptr(), 0xbe,
@@ -246,9 +246,9 @@
   LogSink log_sink;
   absl::AddLogSink(&log_sink);
   auto mem = std::make_unique<TaggedFlatDemandMemory>(kTagGranule);
-  DataBuffer *data_db =
+  DataBuffer* data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
-  DataBuffer *tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  DataBuffer* tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
   data_db->set_latency(0);
   tag_db->set_latency(0);
   int expected_err_count = 0;
@@ -270,12 +270,12 @@
   LogSink log_sink;
   absl::AddLogSink(&log_sink);
   auto mem = std::make_unique<TaggedFlatDemandMemory>(kTagGranule);
-  DataBuffer *data_db =
+  DataBuffer* data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
-  DataBuffer *tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
-  DataBuffer *short_data_db =
+  DataBuffer* tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  DataBuffer* short_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16 - 1);
-  DataBuffer *long_data_db =
+  DataBuffer* long_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16 + 1);
   data_db->set_latency(0);
   tag_db->set_latency(0);
@@ -303,11 +303,11 @@
   LogSink log_sink;
   absl::AddLogSink(&log_sink);
   auto mem = std::make_unique<TaggedFlatDemandMemory>(kTagGranule);
-  DataBuffer *data_db =
+  DataBuffer* data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
-  DataBuffer *tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
-  DataBuffer *short_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(8);
-  DataBuffer *long_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(18);
+  DataBuffer* tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  DataBuffer* short_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(8);
+  DataBuffer* long_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(18);
   data_db->set_latency(0);
   tag_db->set_latency(0);
   short_tag_db->set_latency(0);
@@ -332,14 +332,14 @@
 
 TEST_F(TaggedFlatDemandMemoryTest, TaggedLoadStore) {
   auto mem = std::make_unique<TaggedFlatDemandMemory>(kTagGranule);
-  DataBuffer *ld_data_db =
+  DataBuffer* ld_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
-  DataBuffer *ld_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  DataBuffer* ld_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
   ld_data_db->set_latency(0);
   ld_tag_db->set_latency(0);
-  DataBuffer *st_data_db =
+  DataBuffer* st_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
-  DataBuffer *st_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  DataBuffer* st_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
   mem->Load(0x1000, ld_data_db, ld_tag_db, nullptr, nullptr);
   // The loaded data should be all zeros.
   for (int i = 0; i < 16; i++) {
@@ -387,14 +387,14 @@
   LogSink log_sink;
   absl::AddLogSink(&log_sink);
   auto mem = std::make_unique<TaggedFlatDemandMemory>(kTagGranule);
-  DataBuffer *ld_data_db =
+  DataBuffer* ld_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
-  DataBuffer *ld_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  DataBuffer* ld_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
   ld_data_db->set_latency(0);
   ld_tag_db->set_latency(0);
-  DataBuffer *st_data_db =
+  DataBuffer* st_data_db =
       arch_state_->db_factory()->Allocate<uint8_t>(kTagGranule * 16);
-  DataBuffer *st_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
+  DataBuffer* st_tag_db = arch_state_->db_factory()->Allocate<uint8_t>(16);
   // Write tagged data to memory.
   for (int i = 0; i < st_data_db->size<uint8_t>(); i++) {
     st_data_db->Set<uint8_t>(i, i);
@@ -409,7 +409,7 @@
     EXPECT_EQ(ld_tag_db->Get<uint8_t>(i), 1);
   }
   // Clear tags with non-tagged stores.
-  DataBuffer *st_untagged_db = arch_state_->db_factory()->Allocate<uint8_t>(1);
+  DataBuffer* st_untagged_db = arch_state_->db_factory()->Allocate<uint8_t>(1);
   for (int i = 0; i < st_data_db->size<uint8_t>(); i++) {
     st_untagged_db->Set<uint8_t>(0, st_data_db->size<uint8_t>() - i);
     mem->Store(0x1000 + i, st_untagged_db);
diff --git a/mpact/sim/util/other/instruction_profiler.cc b/mpact/sim/util/other/instruction_profiler.cc
index ab0947e..85941fa 100644
--- a/mpact/sim/util/other/instruction_profiler.cc
+++ b/mpact/sim/util/other/instruction_profiler.cc
@@ -29,7 +29,7 @@
 
 namespace mpact::sim::util {
 
-InstructionProfiler::InstructionProfiler(ElfProgramLoader &elf_loader,
+InstructionProfiler::InstructionProfiler(ElfProgramLoader& elf_loader,
                                          unsigned granularity)
     : elf_loader_(&elf_loader) {
   if (!absl::has_single_bit(granularity)) {
@@ -50,7 +50,7 @@
 }
 
 InstructionProfiler::~InstructionProfiler() {
-  for (auto const &[unused, counters] : profile_ranges_) {
+  for (auto const& [unused, counters] : profile_ranges_) {
     delete[] counters;
   }
   profile_ranges_.clear();
@@ -72,9 +72,9 @@
   last_profile_range_[sample - last_start_]++;
 }
 
-void InstructionProfiler::WriteProfile(std::ostream &os) {
+void InstructionProfiler::WriteProfile(std::ostream& os) {
   os << "Address,Count" << "\n";
-  for (auto const &[range, counters] : profile_ranges_) {
+  for (auto const& [range, counters] : profile_ranges_) {
     uint64_t size = range.end - range.start;
     for (auto i = 0; i < size; ++i) {
       if (counters[i] == 0) continue;
@@ -84,7 +84,7 @@
   }
 }
 
-void InstructionProfiler::SetElfLoader(ElfProgramLoader *elf_loader) {
+void InstructionProfiler::SetElfLoader(ElfProgramLoader* elf_loader) {
   elf_loader_ = elf_loader;
   uint64_t begin = 0;
   uint64_t end = 0;
@@ -92,7 +92,7 @@
   // coalesces ranges that are spaced by less than 0x1'000 units of granularity.
   // This reduces the number of ranges in the map and improves performance
   // during simulation.
-  for (auto const &segment : elf_loader_->elf_reader()->segments) {
+  for (auto const& segment : elf_loader_->elf_reader()->segments) {
     // Only consider segments that are loaded, executable, and with size > 0.
     if (segment->get_type() != PT_LOAD) continue;
     if ((segment->get_flags() & PF_X) == 0) continue;
@@ -115,7 +115,7 @@
     // Otherwise, create a entry from the previously accumulated ranges, and
     // start a new range.
     size = end - begin - 1;
-    uint64_t *counters = new uint64_t[size];
+    uint64_t* counters = new uint64_t[size];
     ::memset(counters, 0, size * sizeof(uint64_t));
     profile_ranges_.insert(
         std::make_pair(MemoryWatcher::AddressRange{begin, end}, counters));
@@ -125,7 +125,7 @@
   // Make the last entry.
   if (begin != 0 || end != 0) {
     uint64_t size = end - begin - 1;
-    uint64_t *counters = new uint64_t[size];
+    uint64_t* counters = new uint64_t[size];
     ::memset(counters, 0, size * sizeof(uint64_t));
     profile_ranges_.insert(
         std::make_pair(MemoryWatcher::AddressRange{begin, end - 1}, counters));
diff --git a/mpact/sim/util/other/instruction_profiler.h b/mpact/sim/util/other/instruction_profiler.h
index 058770b..35fbf35 100644
--- a/mpact/sim/util/other/instruction_profiler.h
+++ b/mpact/sim/util/other/instruction_profiler.h
@@ -43,14 +43,14 @@
   // The granularity is a power of two and determines the value difference
   // between two adjacent sample buckets. For instruction profiling this is
   // the smallest instruction size in bytes.
-  InstructionProfiler(ElfProgramLoader &elf_loader, unsigned granularity);
+  InstructionProfiler(ElfProgramLoader& elf_loader, unsigned granularity);
   explicit InstructionProfiler(unsigned granularity);
   ~InstructionProfiler() override;
 
   // Inherited from CounterValueSetInterface. This will connect to a counter
   // that is assigned the value to profile. The most recently used range is
   // cached for performance. If it doesn't match, call AddSampleInternal().
-  void SetValue(const uint64_t &value) override {
+  void SetValue(const uint64_t& value) override {
     // See if the previously referenced range applies.
     uint64_t sample = value >> shift_;
     if ((sample >= last_start_) && (sample <= last_end_)) {
@@ -61,22 +61,22 @@
   }
 
   // Write the profile to the given stream in csv format.
-  void WriteProfile(std::ostream &os);
+  void WriteProfile(std::ostream& os);
 
   // If the elf loader wasn't set in the constructor, use this method to set
   // it once the elf file is available.
-  void SetElfLoader(ElfProgramLoader *elf_loader);
+  void SetElfLoader(ElfProgramLoader* elf_loader);
 
  private:
   void AddSampleInternal(uint64_t sample);
   int shift_ = 0;
-  ElfProgramLoader *elf_loader_ = nullptr;
-  absl::btree_map<MemoryWatcher::AddressRange, uint64_t *,
+  ElfProgramLoader* elf_loader_ = nullptr;
+  absl::btree_map<MemoryWatcher::AddressRange, uint64_t*,
                   MemoryWatcher::AddressRangeLess>
       profile_ranges_;
   uint64_t last_start_ = 0xffff'ffff'ffff'ffffULL;
   uint64_t last_end_ = 0xffff'ffff'ffff'ffffULL;
-  uint64_t *last_profile_range_ = nullptr;
+  uint64_t* last_profile_range_ = nullptr;
 };
 
 }  // namespace mpact::sim::util
diff --git a/mpact/sim/util/other/simple_uart.cc b/mpact/sim/util/other/simple_uart.cc
index ffbe3bb..949f911 100644
--- a/mpact/sim/util/other/simple_uart.cc
+++ b/mpact/sim/util/other/simple_uart.cc
@@ -10,13 +10,13 @@
 namespace mpact::sim::util {
 
 // Constructors.
-SimpleUart::SimpleUart(ArchState *state, std::ostream &output)
+SimpleUart::SimpleUart(ArchState* state, std::ostream& output)
     : output_(&output) {}
 
-SimpleUart::SimpleUart(ArchState *state) : SimpleUart(state, std::cerr) {}
+SimpleUart::SimpleUart(ArchState* state) : SimpleUart(state, std::cerr) {}
 
-void SimpleUart::Load(uint64_t address, DataBuffer *db, Instruction *inst,
-                      ReferenceCount *context) {
+void SimpleUart::Load(uint64_t address, DataBuffer* db, Instruction* inst,
+                      ReferenceCount* context) {
   // If the address is unaligned, or the size is not a multiple of 4, it should
   // really be handled before it gets this far. Set the db to zero and finish
   // the load.
@@ -47,13 +47,13 @@
 }
 
 // No support for vector loads.
-void SimpleUart::Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-                      DataBuffer *db, Instruction *inst,
-                      ReferenceCount *context) {
+void SimpleUart::Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+                      DataBuffer* db, Instruction* inst,
+                      ReferenceCount* context) {
   LOG(FATAL) << "SimpleUart does not support vector loads";
 }
 
-void SimpleUart::Store(uint64_t address, DataBuffer *db) {
+void SimpleUart::Store(uint64_t address, DataBuffer* db) {
   // If the address is unaligned, or the size is not a multiple of 4, it should
   // really be handled before it gets this far. Set the db to zero and finish
   // the load.
@@ -156,8 +156,8 @@
 }
 
 // No support for vector stores.
-void SimpleUart::Store(DataBuffer *address, DataBuffer *mask_db, int el_size,
-                       DataBuffer *db) {
+void SimpleUart::Store(DataBuffer* address, DataBuffer* mask_db, int el_size,
+                       DataBuffer* db) {
   LOG(FATAL) << "SimpleUart does not support vector stores";
 }
 
diff --git a/mpact/sim/util/other/simple_uart.h b/mpact/sim/util/other/simple_uart.h
index 6142440..3cff450 100644
--- a/mpact/sim/util/other/simple_uart.h
+++ b/mpact/sim/util/other/simple_uart.h
@@ -38,19 +38,19 @@
  public:
   // Constructors.
   // Instantiate the uart and set the output to std::cerr.
-  explicit SimpleUart(ArchState *state);
+  explicit SimpleUart(ArchState* state);
   // Instantiate the uart and set the output to the given ostream.
-  SimpleUart(ArchState *state, std::ostream &output);
+  SimpleUart(ArchState* state, std::ostream& output);
 
   // Memory interface methods used to write to the memory mapped registers.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
-  void Store(uint64_t address, DataBuffer *db) override;
-  void Store(DataBuffer *address, DataBuffer *mask_db, int el_size,
-             DataBuffer *db) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
+  void Store(uint64_t address, DataBuffer* db) override;
+  void Store(DataBuffer* address, DataBuffer* mask_db, int el_size,
+             DataBuffer* db) override;
 
  private:
   // Helper methods.
@@ -65,7 +65,7 @@
   uint32_t divisor_low_byte_ = 0;
   uint32_t interrupt_enable_ = 0;
   uint32_t scratch_;
-  std::ostream *output_;
+  std::ostream* output_;
 };
 
 }  // namespace mpact::sim::util
diff --git a/mpact/sim/util/program_loader/elf_program_loader.cc b/mpact/sim/util/program_loader/elf_program_loader.cc
index 8371a9c..4c7e5a6 100644
--- a/mpact/sim/util/program_loader/elf_program_loader.cc
+++ b/mpact/sim/util/program_loader/elf_program_loader.cc
@@ -37,18 +37,18 @@
 
 constexpr uint64_t kPtGnuStack = 0x6474e551;
 
-ElfProgramLoader::ElfProgramLoader(util::MemoryInterface *code_memory,
-                                   util::MemoryInterface *data_memory)
+ElfProgramLoader::ElfProgramLoader(util::MemoryInterface* code_memory,
+                                   util::MemoryInterface* data_memory)
     : code_memory_(code_memory), data_memory_(data_memory) {}
 
-ElfProgramLoader::ElfProgramLoader(util::MemoryInterface *memory)
+ElfProgramLoader::ElfProgramLoader(util::MemoryInterface* memory)
     : code_memory_(memory), data_memory_(memory) {}
 
-ElfProgramLoader::ElfProgramLoader(generic::CoreDebugInterface *dbg_if)
+ElfProgramLoader::ElfProgramLoader(generic::CoreDebugInterface* dbg_if)
     : dbg_if_(dbg_if) {}
 
 ElfProgramLoader::~ElfProgramLoader() {
-  for (auto *symtab : symbol_accessors_) {
+  for (auto* symtab : symbol_accessors_) {
     delete symtab;
   }
   symbol_accessors_.clear();
@@ -56,7 +56,7 @@
 
 // Only load the program into the elf reader so that symbols can be looked up.
 absl::StatusOr<uint64_t> ElfProgramLoader::LoadSymbols(
-    const std::string &file_name) {
+    const std::string& file_name) {
   struct stat buffer;
   auto result = stat(file_name.c_str(), &buffer);
   if (result == -1) {
@@ -74,7 +74,7 @@
   }
   loaded_ = true;
   // Now look up any symbol sections.
-  for (auto const &section : elf_reader_.sections) {
+  for (auto const& section : elf_reader_.sections) {
     if (section->get_type() == SHT_SYMTAB) {
       symbol_accessors_.push_back(
           new ELFIO::symbol_section_accessor(elf_reader_, section));
@@ -87,7 +87,7 @@
   ELFIO::Elf_Half section_index;
   unsigned char other;
   // Scan symbol table. Place function names in a map for easy lookup.
-  for (auto *symtab : symbol_accessors_) {
+  for (auto* symtab : symbol_accessors_) {
     ELFIO::Elf64_Addr value;
     for (unsigned i = 0; i < symtab->get_symbols_num(); i++) {
       symtab->get_symbol(i, name, value, size, bind, type, section_index,
@@ -106,13 +106,13 @@
 // and iterates over the segments. For each segment it writes it to the
 // appropriate location in the given memories.
 absl::StatusOr<uint64_t> ElfProgramLoader::LoadProgram(
-    const std::string &file_name) {
+    const std::string& file_name) {
   auto load_symbols_res = LoadSymbols(file_name);
   if (!load_symbols_res.ok()) return load_symbols_res.status();
 
   generic::DataBufferFactory db_factory;
 
-  for (auto const &segment : elf_reader_.segments) {
+  for (auto const& segment : elf_reader_.segments) {
     if (segment->get_type() == kPtGnuStack) {
       stack_size_ = segment->get_memory_size();
       has_stack_size_ = (stack_size_ > 0);
@@ -123,7 +123,7 @@
     if (segment->get_file_size() == 0) continue;
     // Read the data from the elf file.
     if (dbg_if_ == nullptr) {  // Use memory interfaces.
-      auto *db = db_factory.Allocate(segment->get_file_size());
+      auto* db = db_factory.Allocate(segment->get_file_size());
       std::memcpy(db->raw_ptr(), segment->get_data(), segment->get_file_size());
 
       if (segment->get_flags() &
@@ -148,7 +148,7 @@
 }
 
 absl::StatusOr<std::pair<uint64_t, uint64_t>> ElfProgramLoader::GetSymbol(
-    const std::string &name) const {
+    const std::string& name) const {
   if (!loaded_) return absl::InternalError("No program loaded");
   if (symbol_accessors_.empty())
     return absl::NotFoundError("Symbol table not found");
@@ -159,7 +159,7 @@
   unsigned char type;
   ELFIO::Elf_Half section_index;
   unsigned char other;
-  for (auto *symtab : symbol_accessors_) {
+  for (auto* symtab : symbol_accessors_) {
     if (symtab->get_symbol(name, value, size, bind, type, section_index,
                            other)) {
       return std::make_pair(static_cast<uint64_t>(value),
diff --git a/mpact/sim/util/program_loader/elf_program_loader.h b/mpact/sim/util/program_loader/elf_program_loader.h
index f023bfb..760f11b 100644
--- a/mpact/sim/util/program_loader/elf_program_loader.h
+++ b/mpact/sim/util/program_loader/elf_program_loader.h
@@ -43,7 +43,7 @@
 };
 
 struct AddressRangeComp {
-  bool operator()(const AddressRange &lhs, const AddressRange &rhs) const {
+  bool operator()(const AddressRange& lhs, const AddressRange& rhs) const {
     if (lhs.end <= rhs.start) {
       return true;
     }
@@ -61,19 +61,19 @@
 // memory.
 class ElfProgramLoader : public ProgramLoaderInterface {
  public:
-  ElfProgramLoader(util::MemoryInterface *code_memory,
-                   util::MemoryInterface *data_memory);
-  explicit ElfProgramLoader(util::MemoryInterface *memory);
-  explicit ElfProgramLoader(generic::CoreDebugInterface *dbg_if);
+  ElfProgramLoader(util::MemoryInterface* code_memory,
+                   util::MemoryInterface* data_memory);
+  explicit ElfProgramLoader(util::MemoryInterface* memory);
+  explicit ElfProgramLoader(generic::CoreDebugInterface* dbg_if);
   ElfProgramLoader() = delete;
   ~ElfProgramLoader() override;
 
-  absl::StatusOr<uint64_t> LoadSymbols(const std::string &file_name) override;
-  absl::StatusOr<uint64_t> LoadProgram(const std::string &file_name) override;
+  absl::StatusOr<uint64_t> LoadSymbols(const std::string& file_name) override;
+  absl::StatusOr<uint64_t> LoadProgram(const std::string& file_name) override;
   // Return the value and size of the symbol 'name' if it exists in the symbol
   // table.
   absl::StatusOr<std::pair<uint64_t, uint64_t>> GetSymbol(
-      const std::string &name) const;
+      const std::string& name) const;
   // If there is a function with symbol table value 'address' return its name.
   absl::StatusOr<std::string> GetFcnSymbolName(uint64_t address) const;
   // Looks up to see if the address is in the range of a function symbol, and
@@ -82,15 +82,15 @@
   // If the GNU stack size program header exists, return the memory size.
   absl::StatusOr<uint64_t> GetStackSize() const;
 
-  const ELFIO::elfio *elf_reader() const { return &elf_reader_; }
+  const ELFIO::elfio* elf_reader() const { return &elf_reader_; }
 
  private:
   bool loaded_ = false;
   ELFIO::elfio elf_reader_;
-  util::MemoryInterface *code_memory_ = nullptr;
-  util::MemoryInterface *data_memory_ = nullptr;
-  generic::CoreDebugInterface *dbg_if_ = nullptr;
-  std::vector<const ELFIO::symbol_section_accessor *> symbol_accessors_;
+  util::MemoryInterface* code_memory_ = nullptr;
+  util::MemoryInterface* data_memory_ = nullptr;
+  generic::CoreDebugInterface* dbg_if_ = nullptr;
+  std::vector<const ELFIO::symbol_section_accessor*> symbol_accessors_;
   absl::flat_hash_map<uint64_t, std::string> fcn_symbol_map_;
   std::map<AddressRange, std::string, AddressRangeComp> function_range_map_;
   uint64_t has_stack_size_ = false;
diff --git a/mpact/sim/util/program_loader/program_loader_interface.h b/mpact/sim/util/program_loader/program_loader_interface.h
index ab88564..f6b5118 100644
--- a/mpact/sim/util/program_loader/program_loader_interface.h
+++ b/mpact/sim/util/program_loader/program_loader_interface.h
@@ -30,10 +30,10 @@
   // Load the executable into the program loader, but don't write segments to
   // memory. Return the entry point.
   virtual absl::StatusOr<uint64_t> LoadSymbols(
-      const std::string &file_name) = 0;
+      const std::string& file_name) = 0;
   // Write program segments to memories and return the entry point.
   virtual absl::StatusOr<uint64_t> LoadProgram(
-      const std::string &file_name) = 0;
+      const std::string& file_name) = 0;
 };
 
 }  // namespace util
diff --git a/mpact/sim/util/program_loader/test/elf_program_loader_test.cc b/mpact/sim/util/program_loader/test/elf_program_loader_test.cc
index 0682961..6ef8f6e 100644
--- a/mpact/sim/util/program_loader/test/elf_program_loader_test.cc
+++ b/mpact/sim/util/program_loader/test/elf_program_loader_test.cc
@@ -77,12 +77,12 @@
   ASSERT_THAT(elf_reader_.validate(), testing::StrEq(""));
   auto result = loader_.LoadProgram(input_file);
   ASSERT_TRUE(result.status().ok());
-  for (auto const &segment : elf_reader_.segments) {
+  for (auto const& segment : elf_reader_.segments) {
     if (segment->get_type() != PT_LOAD) continue;
     if (segment->get_file_size() == 0) continue;
 
     int size = segment->get_file_size();
-    auto *db = db_factory_.Allocate(size);
+    auto* db = db_factory_.Allocate(size);
     memory_.Load(segment->get_virtual_address(), db, nullptr, nullptr);
     EXPECT_EQ(memcmp(db->raw_ptr(), segment->get_data(), size), 0);
     db->DecRef();
diff --git a/mpact/sim/util/renode/cli_forwarder.cc b/mpact/sim/util/renode/cli_forwarder.cc
index dffe1c8..3a05645 100644
--- a/mpact/sim/util/renode/cli_forwarder.cc
+++ b/mpact/sim/util/renode/cli_forwarder.cc
@@ -34,7 +34,7 @@
 using HaltReasonValueType =
     ::mpact::sim::generic::CoreDebugInterface::HaltReasonValueType;
 
-CLIForwarder::CLIForwarder(RenodeCLITop *top) : top_(top) {}
+CLIForwarder::CLIForwarder(RenodeCLITop* top) : top_(top) {}
 
 // Forward the calls to the CheriotRenodeCLITop class - CLI methods.
 
@@ -54,27 +54,27 @@
   return top_->CLIGetLastHaltReason();
 }
 
-absl::StatusOr<uint64_t> CLIForwarder::ReadRegister(const std::string &name) {
+absl::StatusOr<uint64_t> CLIForwarder::ReadRegister(const std::string& name) {
   return top_->CLIReadRegister(name);
 }
 
-absl::Status CLIForwarder::WriteRegister(const std::string &name,
+absl::Status CLIForwarder::WriteRegister(const std::string& name,
                                          uint64_t value) {
   return top_->CLIWriteRegister(name, value);
 }
 
-absl::StatusOr<DataBuffer *> CLIForwarder::GetRegisterDataBuffer(
-    const std::string &name) {
+absl::StatusOr<DataBuffer*> CLIForwarder::GetRegisterDataBuffer(
+    const std::string& name) {
   return top_->CLIGetRegisterDataBuffer(name);
 }
 
-absl::StatusOr<size_t> CLIForwarder::ReadMemory(uint64_t address, void *buf,
+absl::StatusOr<size_t> CLIForwarder::ReadMemory(uint64_t address, void* buf,
                                                 size_t length) {
   return top_->CLIReadMemory(address, buf, length);
 }
 
 absl::StatusOr<size_t> CLIForwarder::WriteMemory(uint64_t address,
-                                                 const void *buf,
+                                                 const void* buf,
                                                  size_t length) {
   return top_->CLIWriteMemory(address, buf, length);
 }
@@ -95,7 +95,7 @@
   return top_->CLIClearAllSwBreakpoints();
 }
 
-absl::StatusOr<Instruction *> CLIForwarder::GetInstruction(uint64_t address) {
+absl::StatusOr<Instruction*> CLIForwarder::GetInstruction(uint64_t address) {
   return top_->CLIGetInstruction(address);
 }
 
diff --git a/mpact/sim/util/renode/cli_forwarder.h b/mpact/sim/util/renode/cli_forwarder.h
index 139bee5..f253c4b 100644
--- a/mpact/sim/util/renode/cli_forwarder.h
+++ b/mpact/sim/util/renode/cli_forwarder.h
@@ -37,10 +37,10 @@
 
 class CLIForwarder : public CoreDebugInterface {
  public:
-  explicit CLIForwarder(RenodeCLITop *top);
+  explicit CLIForwarder(RenodeCLITop* top);
   CLIForwarder() = delete;
-  CLIForwarder(const CLIForwarder &) = delete;
-  CLIForwarder &operator=(const CLIForwarder &) = delete;
+  CLIForwarder(const CLIForwarder&) = delete;
+  CLIForwarder& operator=(const CLIForwarder&) = delete;
 
   ~CLIForwarder() override = default;
 
@@ -62,8 +62,8 @@
   absl::StatusOr<HaltReasonValueType> GetLastHaltReason() override;
 
   // Read/write the named registers.
-  absl::StatusOr<uint64_t> ReadRegister(const std::string &name) override;
-  absl::Status WriteRegister(const std::string &name, uint64_t value) override;
+  absl::StatusOr<uint64_t> ReadRegister(const std::string& name) override;
+  absl::Status WriteRegister(const std::string& name, uint64_t value) override;
 
   // Some registers, including vector registers, have values that exceed the
   // 64 bits supported in the Read/Write register API calls. This function
@@ -75,13 +75,13 @@
   // Note (2): In some cases, a register write may replace the DataBuffer
   // instance within a register so that any stored references to it become
   // stale.
-  absl::StatusOr<DataBuffer *> GetRegisterDataBuffer(
-      const std::string &name) override;
+  absl::StatusOr<DataBuffer*> GetRegisterDataBuffer(
+      const std::string& name) override;
 
   // Read/write the buffers to memory.
-  absl::StatusOr<size_t> ReadMemory(uint64_t address, void *buf,
+  absl::StatusOr<size_t> ReadMemory(uint64_t address, void* buf,
                                     size_t length) override;
-  absl::StatusOr<size_t> WriteMemory(uint64_t address, const void *buf,
+  absl::StatusOr<size_t> WriteMemory(uint64_t address, const void* buf,
                                      size_t length) override;
 
   // Test to see if there's a breakpoint at the given address.
@@ -93,12 +93,12 @@
   absl::Status ClearAllSwBreakpoints() override;
 
   // Return the instruction object for the instruction at the given address.
-  absl::StatusOr<Instruction *> GetInstruction(uint64_t address) override;
+  absl::StatusOr<Instruction*> GetInstruction(uint64_t address) override;
   // Return the string representation for the instruction at the given address.
   absl::StatusOr<std::string> GetDisassembly(uint64_t address) override;
 
  private:
-  RenodeCLITop *top_;
+  RenodeCLITop* top_;
 };
 
 }  // namespace renode
diff --git a/mpact/sim/util/renode/renode_cli_top.cc b/mpact/sim/util/renode/renode_cli_top.cc
index 2c0947e..6292c2b 100644
--- a/mpact/sim/util/renode/renode_cli_top.cc
+++ b/mpact/sim/util/renode/renode_cli_top.cc
@@ -36,7 +36,7 @@
 using ::mpact::sim::generic::CoreDebugInterface;
 using ::mpact::sim::generic::operator*;  // NOLINT: used below (clang error).
 
-RenodeCLITop::RenodeCLITop(CoreDebugInterface *top, bool wait_for_cli)
+RenodeCLITop::RenodeCLITop(CoreDebugInterface* top, bool wait_for_cli)
     : top_(top), wait_for_cli_(wait_for_cli) {
   absl::MutexLock lock(&run_control_mutex_);
   cli_status_ = wait_for_cli_ ? RunStatus::kHalted : RunStatus::kRunning;
@@ -117,23 +117,23 @@
 }
 
 absl::StatusOr<uint64_t> RenodeCLITop::RenodeReadRegister(
-    const std::string &name) {
+    const std::string& name) {
   return top_->ReadRegister(name);
 }
 
-absl::Status RenodeCLITop::RenodeWriteRegister(const std::string &name,
+absl::Status RenodeCLITop::RenodeWriteRegister(const std::string& name,
                                                uint64_t value) {
   return top_->WriteRegister(name, value);
 }
 
 absl::StatusOr<size_t> RenodeCLITop::RenodeReadMemory(uint64_t address,
-                                                      void *buf,
+                                                      void* buf,
                                                       size_t length) {
   return top_->ReadMemory(address, buf, length);
 }
 
 absl::StatusOr<size_t> RenodeCLITop::RenodeWriteMemory(uint64_t address,
-                                                       const void *buf,
+                                                       const void* buf,
                                                        size_t length) {
   return top_->WriteMemory(address, buf, length);
 }
@@ -243,24 +243,24 @@
 }
 
 absl::StatusOr<uint64_t> RenodeCLITop::CLIReadRegister(
-    const std::string &name) {
+    const std::string& name) {
   return DoWhenInControl<absl::StatusOr<uint64_t>>(
       [this, &name]() { return top_->ReadRegister(name); });
 }
 
-absl::Status RenodeCLITop::CLIWriteRegister(const std::string &name,
+absl::Status RenodeCLITop::CLIWriteRegister(const std::string& name,
                                             uint64_t value) {
   return DoWhenInControl<absl::Status>(
       [this, &name, &value]() { return top_->WriteRegister(name, value); });
 }
 
-absl::StatusOr<generic::DataBuffer *> RenodeCLITop::CLIGetRegisterDataBuffer(
-    const std::string &name) {
-  return DoWhenInControl<absl::StatusOr<generic::DataBuffer *>>(
+absl::StatusOr<generic::DataBuffer*> RenodeCLITop::CLIGetRegisterDataBuffer(
+    const std::string& name) {
+  return DoWhenInControl<absl::StatusOr<generic::DataBuffer*>>(
       [this, &name]() { return top_->GetRegisterDataBuffer(name); });
 }
 
-absl::StatusOr<size_t> RenodeCLITop::CLIReadMemory(uint64_t address, void *buf,
+absl::StatusOr<size_t> RenodeCLITop::CLIReadMemory(uint64_t address, void* buf,
                                                    size_t length) {
   return DoWhenInControl<absl::StatusOr<size_t>>(
       [this, &address, &buf, &length]() {
@@ -269,7 +269,7 @@
 }
 
 absl::StatusOr<size_t> RenodeCLITop::CLIWriteMemory(uint64_t address,
-                                                    const void *buf,
+                                                    const void* buf,
                                                     size_t length) {
   return DoWhenInControl<absl::StatusOr<size_t>>(
       [this, &address, &buf, &length]() {
@@ -297,9 +297,8 @@
       [this]() { return top_->ClearAllSwBreakpoints(); });
 }
 
-absl::StatusOr<Instruction *> RenodeCLITop::CLIGetInstruction(
-    uint64_t address) {
-  return DoWhenInControl<absl::StatusOr<Instruction *>>(
+absl::StatusOr<Instruction*> RenodeCLITop::CLIGetInstruction(uint64_t address) {
+  return DoWhenInControl<absl::StatusOr<Instruction*>>(
       [this, &address]() { return top_->GetInstruction(address); });
 }
 
@@ -309,12 +308,12 @@
 }
 
 void RenodeCLITop::CLIRequestHalt(HaltReason halt_reason,
-                                  const Instruction *inst) {
+                                  const Instruction* inst) {
   (void)top_->Halt(halt_reason);
 }
 
 void RenodeCLITop::CLIRequestHalt(HaltReasonValueType halt_reason,
-                                  const Instruction *inst) {
+                                  const Instruction* inst) {
   (void)top_->Halt(halt_reason);
 }
 
diff --git a/mpact/sim/util/renode/renode_cli_top.h b/mpact/sim/util/renode/renode_cli_top.h
index 5945565..7059421 100644
--- a/mpact/sim/util/renode/renode_cli_top.h
+++ b/mpact/sim/util/renode/renode_cli_top.h
@@ -45,7 +45,7 @@
 // line interface and forwards them to the top simulator control interface.
 class RenodeCLITop {
  public:
-  RenodeCLITop(CoreDebugInterface *top, bool wait_for_cli);
+  RenodeCLITop(CoreDebugInterface* top, bool wait_for_cli);
   virtual ~RenodeCLITop() = default;
 
   // Set the connected status of the command line interface.
@@ -58,14 +58,14 @@
   // Get the reason for the last halt.
   virtual absl::StatusOr<HaltReasonValueType> RenodeGetLastHaltReason();
   // Register access by register name.
-  virtual absl::StatusOr<uint64_t> RenodeReadRegister(const std::string &name);
-  virtual absl::Status RenodeWriteRegister(const std::string &name,
+  virtual absl::StatusOr<uint64_t> RenodeReadRegister(const std::string& name);
+  virtual absl::Status RenodeWriteRegister(const std::string& name,
                                            uint64_t value);
   // Read and Write memory methods bypass any semihosting.
-  virtual absl::StatusOr<size_t> RenodeReadMemory(uint64_t address, void *buf,
+  virtual absl::StatusOr<size_t> RenodeReadMemory(uint64_t address, void* buf,
                                                   size_t length);
   virtual absl::StatusOr<size_t> RenodeWriteMemory(uint64_t address,
-                                                   const void *buf,
+                                                   const void* buf,
                                                    size_t length);
 
   // Methods that handle requests from Command Line Interface.
@@ -79,28 +79,28 @@
   // Wait for free run to complete.
   virtual absl::Status CLIWait();
   virtual absl::StatusOr<RunStatus> CLIGetRunStatus();
-  virtual void CLIRequestHalt(HaltReason halt_reason, const Instruction *inst);
+  virtual void CLIRequestHalt(HaltReason halt_reason, const Instruction* inst);
   virtual void CLIRequestHalt(HaltReasonValueType halt_reason,
-                              const Instruction *inst);
+                              const Instruction* inst);
   virtual absl::StatusOr<HaltReasonValueType> CLIGetLastHaltReason();
   // Register access by register name.
-  virtual absl::StatusOr<uint64_t> CLIReadRegister(const std::string &name);
-  virtual absl::Status CLIWriteRegister(const std::string &name,
+  virtual absl::StatusOr<uint64_t> CLIReadRegister(const std::string& name);
+  virtual absl::Status CLIWriteRegister(const std::string& name,
                                         uint64_t value);
-  virtual absl::StatusOr<DataBuffer *> CLIGetRegisterDataBuffer(
-      const std::string &name);
+  virtual absl::StatusOr<DataBuffer*> CLIGetRegisterDataBuffer(
+      const std::string& name);
   // Read and Write memory methods bypass any semihosting.
-  virtual absl::StatusOr<size_t> CLIReadMemory(uint64_t address, void *buf,
+  virtual absl::StatusOr<size_t> CLIReadMemory(uint64_t address, void* buf,
                                                size_t length);
   virtual absl::StatusOr<size_t> CLIWriteMemory(uint64_t address,
-                                                const void *buf, size_t length);
+                                                const void* buf, size_t length);
 
   // Breakpoint and watchpoint management.
   virtual bool CLIHasBreakpoint(uint64_t address);
   virtual absl::Status CLISetSwBreakpoint(uint64_t address);
   virtual absl::Status CLIClearSwBreakpoint(uint64_t address);
   virtual absl::Status CLIClearAllSwBreakpoints();
-  virtual absl::StatusOr<Instruction *> CLIGetInstruction(uint64_t address);
+  virtual absl::StatusOr<Instruction*> CLIGetInstruction(uint64_t address);
   virtual absl::StatusOr<std::string> CLIGetDisassembly(uint64_t address);
 
  protected:
@@ -109,11 +109,11 @@
   template <typename T>
   T DoWhenInControl(absl::AnyInvocable<T(void)> action);
   // Accessor.
-  CoreDebugInterface *top() const { return top_; }
+  CoreDebugInterface* top() const { return top_; }
 
  private:
   bool IsCLIInControl() const;
-  CoreDebugInterface *top_ = nullptr;
+  CoreDebugInterface* top_ = nullptr;
   // Mutex that determines which of ReNode and the command line interface has
   // control over the simulator control interface.
   absl::Mutex run_control_mutex_;
diff --git a/mpact/sim/util/renode/renode_debug_interface.h b/mpact/sim/util/renode/renode_debug_interface.h
index 401da5b..3d8ea55 100644
--- a/mpact/sim/util/renode/renode_debug_interface.h
+++ b/mpact/sim/util/renode/renode_debug_interface.h
@@ -49,7 +49,7 @@
   using generic::CoreDebugInterface::WriteRegister;
 
   // Load executable or load symbols from executable.
-  virtual absl::StatusOr<uint64_t> LoadExecutable(const char *elf_file_name,
+  virtual absl::StatusOr<uint64_t> LoadExecutable(const char* elf_file_name,
                                                   bool for_symbols_only) = 0;
 
   // Read/write the numeric id registers.
@@ -58,11 +58,11 @@
   // Get register information.
   virtual int32_t GetRenodeRegisterInfoSize() const = 0;
   virtual absl::Status GetRenodeRegisterInfo(int32_t index, int32_t max_len,
-                                             char *name,
-                                             RenodeCpuRegister &info) = 0;
+                                             char* name,
+                                             RenodeCpuRegister& info) = 0;
   // Set configuration item.
-  virtual absl::Status SetConfig(const char *config_names[],
-                                 const char *config_values[], int size) = 0;
+  virtual absl::Status SetConfig(const char* config_names[],
+                                 const char* config_values[], int size) = 0;
   // Set IRQ.
   virtual absl::Status SetIrqValue(int32_t irq_num, bool irq_value) = 0;
 
@@ -89,14 +89,14 @@
   absl::StatusOr<RunStatus> GetRunStatus() final {
     return absl::InternalError("GetRunStatus: Not implemented");
   }
-  absl::StatusOr<uint64_t> ReadRegister(const std::string &name) final {
+  absl::StatusOr<uint64_t> ReadRegister(const std::string& name) final {
     return absl::InternalError("ReadRegister: Not implemented");
   }
-  absl::Status WriteRegister(const std::string &name, uint64_t value) final {
+  absl::Status WriteRegister(const std::string& name, uint64_t value) final {
     return absl::InternalError("WriteRegister: Not implemented");
   }
-  absl::StatusOr<mpact::sim::generic::DataBuffer *> GetRegisterDataBuffer(
-      const std::string &) final {
+  absl::StatusOr<mpact::sim::generic::DataBuffer*> GetRegisterDataBuffer(
+      const std::string&) final {
     return absl::InternalError("GetRegisterDataBuffer: Not implemented");
   }
   bool HasBreakpoint(uint64_t address) final { return false; }
@@ -109,7 +109,7 @@
   absl::Status ClearAllSwBreakpoints() final {
     return absl::InternalError("ClearAllSwBreakpoints: Not implemented");
   }
-  absl::StatusOr<mpact::sim::generic::Instruction *> GetInstruction(
+  absl::StatusOr<mpact::sim::generic::Instruction*> GetInstruction(
       uint64_t address) final {
     return absl::InternalError("GetInstruction: Not implemented");
   }
diff --git a/mpact/sim/util/renode/renode_memory_access.cc b/mpact/sim/util/renode/renode_memory_access.cc
index 919e37f..6b9b39a 100644
--- a/mpact/sim/util/renode/renode_memory_access.cc
+++ b/mpact/sim/util/renode/renode_memory_access.cc
@@ -29,8 +29,8 @@
 using ::mpact::sim::generic::ReferenceCount;
 
 // Process the load using the interface to the ReNode system bus to fetch data.
-void RenodeMemoryAccess::Load(uint64_t address, DataBuffer *db,
-                              Instruction *inst, ReferenceCount *context) {
+void RenodeMemoryAccess::Load(uint64_t address, DataBuffer* db,
+                              Instruction* inst, ReferenceCount* context) {
   if (read_fcn_ == nullptr) {
     LOG(WARNING) << "RenodeMemoryAccess: read_fcn_ is null";
     std::memset(db->raw_ptr(), 0, db->size<uint8_t>());
@@ -39,8 +39,7 @@
   }
   int32_t size = db->size<uint8_t>();
   // Call the C# function delegate.
-  auto bytes_read =
-      read_fcn_(address, static_cast<char *>(db->raw_ptr()), size);
+  auto bytes_read = read_fcn_(address, static_cast<char*>(db->raw_ptr()), size);
   if (size != bytes_read) {
     LOG(ERROR) << "Failed to read " << size - bytes_read << " bytes of "
                << size;
@@ -49,16 +48,16 @@
 }
 
 // TODO(torerik): add vector load functionality.
-void RenodeMemoryAccess::Load(DataBuffer *address_db, DataBuffer *mask_db,
-                              int el_size, DataBuffer *db, Instruction *inst,
-                              ReferenceCount *context) {
+void RenodeMemoryAccess::Load(DataBuffer* address_db, DataBuffer* mask_db,
+                              int el_size, DataBuffer* db, Instruction* inst,
+                              ReferenceCount* context) {
   LOG(ERROR) << "RenodeMemoryAccess: Vector loads are not supported";
 }
 
 // Complete the load by writing back (or scheduling the write back of) the
 // fetched data.
-void RenodeMemoryAccess::FinishLoad(int latency, Instruction *inst,
-                                    ReferenceCount *context) {
+void RenodeMemoryAccess::FinishLoad(int latency, Instruction* inst,
+                                    ReferenceCount* context) {
   if (inst == nullptr) return;
   // If the latency is 0, execute the instruction immediately.
   if (latency == 0) {
@@ -79,7 +78,7 @@
 }
 
 // Process the store using the interface to the ReNode system bus to store data.
-void RenodeMemoryAccess::Store(uint64_t address, DataBuffer *db) {
+void RenodeMemoryAccess::Store(uint64_t address, DataBuffer* db) {
   if (write_fcn_ == nullptr) {
     LOG(WARNING) << "RenodeMemoryAccess: write_fcn_ is null";
     return;
@@ -87,7 +86,7 @@
   int32_t size = db->size<uint8_t>();
   // Call the C# function delegate.
   auto bytes_written =
-      write_fcn_(address, static_cast<char *>(db->raw_ptr()), size);
+      write_fcn_(address, static_cast<char*>(db->raw_ptr()), size);
   if (size != bytes_written) {
     LOG(ERROR) << "Failed to write " << size - bytes_written << " bytes of "
                << size;
@@ -95,8 +94,8 @@
 }
 
 // TODO(torerik): add vector store functionality.
-void RenodeMemoryAccess::Store(DataBuffer *address, DataBuffer *mask,
-                               int el_size, DataBuffer *db) {
+void RenodeMemoryAccess::Store(DataBuffer* address, DataBuffer* mask,
+                               int el_size, DataBuffer* db) {
   LOG(ERROR) << "RenodeMemoryAccess: Vector stores are not supported";
 }
 
diff --git a/mpact/sim/util/renode/renode_memory_access.h b/mpact/sim/util/renode/renode_memory_access.h
index fbded36..5a0c10a 100644
--- a/mpact/sim/util/renode/renode_memory_access.h
+++ b/mpact/sim/util/renode/renode_memory_access.h
@@ -38,7 +38,7 @@
  public:
   // Function call signature for the sysbus read/write methods.
   using RenodeMemoryFunction =
-      absl::AnyInvocable<int32_t(uint64_t, char *, int32_t)>;
+      absl::AnyInvocable<int32_t(uint64_t, char*, int32_t)>;
 
   RenodeMemoryAccess(RenodeMemoryFunction read_fcn,
                      RenodeMemoryFunction write_fcn)
@@ -46,17 +46,17 @@
 
   // MemoryInterface methods.
   // Single item load.
-  void Load(uint64_t address, DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(uint64_t address, DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Vector load.
-  void Load(DataBuffer *address_db, DataBuffer *mask_db, int el_size,
-            DataBuffer *db, Instruction *inst,
-            ReferenceCount *context) override;
+  void Load(DataBuffer* address_db, DataBuffer* mask_db, int el_size,
+            DataBuffer* db, Instruction* inst,
+            ReferenceCount* context) override;
   // Single item store.
-  void Store(uint64_t address, DataBuffer *db) override;
+  void Store(uint64_t address, DataBuffer* db) override;
   // Vector store.
-  void Store(DataBuffer *address, DataBuffer *mask, int el_size,
-             DataBuffer *db) override;
+  void Store(DataBuffer* address, DataBuffer* mask, int el_size,
+             DataBuffer* db) override;
 
   bool has_read_fcn() const { return read_fcn_ != nullptr; }
   bool has_write_fcn() const { return write_fcn_ != nullptr; }
@@ -70,7 +70,7 @@
  private:
   // Method that is responsible to write back the load data to the appropriate
   // destination.
-  void FinishLoad(int latency, Instruction *inst, ReferenceCount *context);
+  void FinishLoad(int latency, Instruction* inst, ReferenceCount* context);
 
   // System bus read/write function pointers (point to C# delegates).
   RenodeMemoryFunction read_fcn_;
diff --git a/mpact/sim/util/renode/renode_mpact.cc b/mpact/sim/util/renode/renode_mpact.cc
index b43487b..0b96319 100644
--- a/mpact/sim/util/renode/renode_mpact.cc
+++ b/mpact/sim/util/renode/renode_mpact.cc
@@ -35,36 +35,36 @@
 using ::mpact::sim::util::MemoryInterface;
 
 // This function must be defined in the library.
-extern ::mpact::sim::util::renode::RenodeDebugInterface *CreateMpactSim(
-    std::string name, std::string cpu_type, MemoryInterface *);
+extern ::mpact::sim::util::renode::RenodeDebugInterface* CreateMpactSim(
+    std::string name, std::string cpu_type, MemoryInterface*);
 
 using ::mpact::sim::util::renode::RenodeAgent;
 using ::mpact::sim::util::renode::RenodeCpuRegister;
 
 // Implementation of the C interface functions. They each forward the call to
 // the corresponding method in RenodeAgent.
-int32_t construct(char *cpu_type, int32_t max_name_length) {
+int32_t construct(char* cpu_type, int32_t max_name_length) {
   return RenodeAgent::Instance()->Construct(cpu_type, max_name_length, nullptr,
                                             nullptr);
 }
 
-int32_t construct_with_sysbus(char *cpu_type, int32_t max_name_length,
-                              int32_t (*read_callback)(uint64_t, char *,
+int32_t construct_with_sysbus(char* cpu_type, int32_t max_name_length,
+                              int32_t (*read_callback)(uint64_t, char*,
                                                        int32_t),
-                              int32_t (*write_callback)(uint64_t, char *,
+                              int32_t (*write_callback)(uint64_t, char*,
                                                         int32_t)) {
   return RenodeAgent::Instance()->Construct(cpu_type, max_name_length,
                                             read_callback, write_callback);
 }
 
-int32_t connect(char *cpu_type, int32_t id, int32_t max_name_length) {
+int32_t connect(char* cpu_type, int32_t id, int32_t max_name_length) {
   return RenodeAgent::Instance()->Connect(cpu_type, id, max_name_length,
                                           nullptr, nullptr);
 }
 
-int32_t connect_with_sysbus(char *cpu_type, int32_t id, int32_t max_name_length,
-                            int32_t (*read_callback)(uint64_t, char *, int32_t),
-                            int32_t (*write_callback)(uint64_t, char *,
+int32_t connect_with_sysbus(char* cpu_type, int32_t id, int32_t max_name_length,
+                            int32_t (*read_callback)(uint64_t, char*, int32_t),
+                            int32_t (*write_callback)(uint64_t, char*,
                                                       int32_t)) {
   return RenodeAgent::Instance()->Connect(cpu_type, id, max_name_length,
                                           read_callback, write_callback);
@@ -78,23 +78,23 @@
   return RenodeAgent::Instance()->GetRegisterInfoSize(id);
 }
 
-int32_t get_reg_info(int32_t id, int32_t index, char *name, void *info) {
+int32_t get_reg_info(int32_t id, int32_t index, char* name, void* info) {
   if (info == nullptr) return -1;
   return RenodeAgent::Instance()->GetRegisterInfo(
-      id, index, name, static_cast<RenodeCpuRegister *>(info));
+      id, index, name, static_cast<RenodeCpuRegister*>(info));
 }
 
-uint64_t load_elf(int32_t id, const char *elf_file_name, bool for_symbols_only,
-                  int32_t *status) {
+uint64_t load_elf(int32_t id, const char* elf_file_name, bool for_symbols_only,
+                  int32_t* status) {
   return RenodeAgent::Instance()->LoadExecutable(id, elf_file_name,
                                                  for_symbols_only, status);
 }
 
-int32_t load_image(int32_t id, const char *file_name, uint64_t address) {
+int32_t load_image(int32_t id, const char* file_name, uint64_t address) {
   return RenodeAgent::Instance()->LoadImage(id, file_name, address);
 }
 
-int32_t read_register(int32_t id, uint32_t reg_id, uint64_t *value) {
+int32_t read_register(int32_t id, uint32_t reg_id, uint64_t* value) {
   return RenodeAgent::Instance()->ReadRegister(id, reg_id, value);
 }
 
@@ -102,22 +102,22 @@
   return RenodeAgent::Instance()->WriteRegister(id, reg_id, value);
 }
 
-uint64_t read_memory(int32_t id, uint64_t address, char *buffer,
+uint64_t read_memory(int32_t id, uint64_t address, char* buffer,
                      uint64_t length) {
   return RenodeAgent::Instance()->ReadMemory(id, address, buffer, length);
 }
 
-uint64_t write_memory(int32_t id, uint64_t address, const char *buffer,
+uint64_t write_memory(int32_t id, uint64_t address, const char* buffer,
                       uint64_t length) {
   return RenodeAgent::Instance()->WriteMemory(id, address, buffer, length);
 }
 
-uint64_t step(int32_t id, uint64_t num_to_step, int32_t *status) {
+uint64_t step(int32_t id, uint64_t num_to_step, int32_t* status) {
   return RenodeAgent::Instance()->Step(id, num_to_step, status);
 }
 
-int32_t set_config(int32_t id, const char *config_names[],
-                   const char *config_values[], int32_t size) {
+int32_t set_config(int32_t id, const char* config_names[],
+                   const char* config_values[], int32_t size) {
   return RenodeAgent::Instance()->SetConfig(id, config_names, config_values,
                                             size);
 }
@@ -133,18 +133,18 @@
 
 using HaltReason = ::mpact::sim::generic::CoreDebugInterface::HaltReason;
 
-RenodeAgent *RenodeAgent::instance_ = nullptr;
+RenodeAgent* RenodeAgent::instance_ = nullptr;
 int32_t RenodeAgent::count_ = 0;
 
 // Create the debug instance by calling the factory function.
-int32_t RenodeAgent::Construct(char *cpu_type, int32_t max_name_length,
-                               int32_t (*read_callback)(uint64_t, char *,
+int32_t RenodeAgent::Construct(char* cpu_type, int32_t max_name_length,
+                               int32_t (*read_callback)(uint64_t, char*,
                                                         int32_t),
-                               int32_t (*write_callback)(uint64_t, char *,
+                               int32_t (*write_callback)(uint64_t, char*,
                                                          int32_t)) {
   std::string name = absl::StrCat("renode", count_);
-  auto *memory_access = new RenodeMemoryAccess(read_callback, write_callback);
-  auto *dbg = CreateMpactSim(name, cpu_type, memory_access);
+  auto* memory_access = new RenodeMemoryAccess(read_callback, write_callback);
+  auto* dbg = CreateMpactSim(name, cpu_type, memory_access);
   if (dbg == nullptr) {
     delete memory_access;
     return -1;
@@ -160,16 +160,17 @@
   return RenodeAgent::count_++;
 }
 
-int32_t RenodeAgent::Connect(
-    char *cpu_type, int32_t id, int32_t max_name_length,
-    int32_t (*read_callback)(uint64_t, char *, int32_t),
-    int32_t (*write_callback)(uint64_t, char *, int32_t)) {
+int32_t RenodeAgent::Connect(char* cpu_type, int32_t id,
+                             int32_t max_name_length,
+                             int32_t (*read_callback)(uint64_t, char*, int32_t),
+                             int32_t (*write_callback)(uint64_t, char*,
+                                                       int32_t)) {
   // First check if the instance already exists.
   auto iter = core_dbg_instances_.find(id);
   if (iter != core_dbg_instances_.end()) {
     // If memory callbacks are provided, don't overwrite any previous non-null
     // callbacks.
-    auto *mem_access = renode_memory_access_.at(id);
+    auto* mem_access = renode_memory_access_.at(id);
     // Replace any null callbacks.
     if (!mem_access->has_read_fcn()) {
       mem_access->set_read_fcn(read_callback);
@@ -182,8 +183,8 @@
 
   // The instance does not exist, so create a new debug instance.
   std::string name = absl::StrCat("renode", id);
-  auto *memory_access = new RenodeMemoryAccess(read_callback, write_callback);
-  auto *dbg = CreateMpactSim(name, cpu_type, memory_access);
+  auto* memory_access = new RenodeMemoryAccess(read_callback, write_callback);
+  auto* dbg = CreateMpactSim(name, cpu_type, memory_access);
   if (dbg == nullptr) {
     delete memory_access;
     return -1;
@@ -224,17 +225,17 @@
   // Check for valid instance.
   auto dbg_iter = core_dbg_instances_.find(id);
   if (dbg_iter == core_dbg_instances_.end()) return -1;
-  auto *dbg = dbg_iter->second;
+  auto* dbg = dbg_iter->second;
   return dbg->GetRenodeRegisterInfoSize();
 }
 
-int32_t RenodeAgent::GetRegisterInfo(int32_t id, int32_t index, char *name,
-                                     RenodeCpuRegister *info) {
+int32_t RenodeAgent::GetRegisterInfo(int32_t id, int32_t index, char* name,
+                                     RenodeCpuRegister* info) {
   // Check for valid instance.
   if (info == nullptr) return -1;
   auto dbg_iter = core_dbg_instances_.find(id);
   if (dbg_iter == core_dbg_instances_.end()) return -1;
-  auto *dbg = dbg_iter->second;
+  auto* dbg = dbg_iter->second;
   int32_t max_len = name_length_map_.at(id);
   auto result = dbg->GetRenodeRegisterInfo(index, max_len, name, *info);
   if (!result.ok()) return -1;
@@ -243,13 +244,13 @@
 
 // Read the register given by the id.
 int32_t RenodeAgent::ReadRegister(int32_t id, uint32_t reg_id,
-                                  uint64_t *value) {
+                                  uint64_t* value) {
   // Check for valid instance.
   if (value == nullptr) return -1;
   auto dbg_iter = core_dbg_instances_.find(id);
   if (dbg_iter == core_dbg_instances_.end()) return -1;
   // Read register.
-  auto *dbg = dbg_iter->second;
+  auto* dbg = dbg_iter->second;
   auto result = dbg->ReadRegister(reg_id);
   if (!result.ok()) return -1;
   *value = result.value();
@@ -262,13 +263,13 @@
   auto dbg_iter = core_dbg_instances_.find(id);
   if (dbg_iter == core_dbg_instances_.end()) return -1;
   // Write register.
-  auto *dbg = dbg_iter->second;
+  auto* dbg = dbg_iter->second;
   auto result = dbg->WriteRegister(reg_id, value);
   if (!result.ok()) return -1;
   return 0;
 }
 
-uint64_t RenodeAgent::ReadMemory(int32_t id, uint64_t address, char *buffer,
+uint64_t RenodeAgent::ReadMemory(int32_t id, uint64_t address, char* buffer,
                                  uint64_t length) {
   // Get the debug interface.
   auto dbg_iter = core_dbg_instances_.find(id);
@@ -276,28 +277,28 @@
     LOG(ERROR) << "No such core dbg instance: " << id;
     return 0;
   }
-  auto *dbg = dbg_iter->second;
+  auto* dbg = dbg_iter->second;
   auto res = dbg->ReadMemory(address, buffer, length);
   if (!res.ok()) return 0;
   return res.value();
 }
 
 uint64_t RenodeAgent::WriteMemory(int32_t id, uint64_t address,
-                                  const char *buffer, uint64_t length) {
+                                  const char* buffer, uint64_t length) {
   // Get the debug interface.
   auto dbg_iter = core_dbg_instances_.find(id);
   if (dbg_iter == core_dbg_instances_.end()) {
     LOG(ERROR) << "No such core dbg instance: " << id;
     return 0;
   }
-  auto *dbg = dbg_iter->second;
+  auto* dbg = dbg_iter->second;
   auto res = dbg->WriteMemory(address, buffer, length);
   if (!res.ok()) return 0;
   return res.value();
 }
 
-uint64_t RenodeAgent::LoadExecutable(int32_t id, const char *file_name,
-                                     bool for_symbols_only, int32_t *status) {
+uint64_t RenodeAgent::LoadExecutable(int32_t id, const char* file_name,
+                                     bool for_symbols_only, int32_t* status) {
   // Get the debug interface.
   auto dbg_iter = core_dbg_instances_.find(id);
   if (dbg_iter == core_dbg_instances_.end()) {
@@ -306,7 +307,7 @@
     return 0;
   }
   // Instantiate loader.
-  auto *dbg = dbg_iter->second;
+  auto* dbg = dbg_iter->second;
   auto res = dbg->LoadExecutable(file_name, for_symbols_only);
   if (!res.ok()) {
     LOG(ERROR) << "Failed to load executable: " << res.status().message();
@@ -318,7 +319,7 @@
   return entry;
 }
 
-int32_t RenodeAgent::LoadImage(int32_t id, const char *file_name,
+int32_t RenodeAgent::LoadImage(int32_t id, const char* file_name,
                                uint64_t address) {
   // Get the debug interface.
   auto dbg_iter = core_dbg_instances_.find(id);
@@ -326,7 +327,7 @@
     LOG(ERROR) << "No such core dbg instance: " << id;
     return -1;
   }
-  auto *dbg = dbg_iter->second;
+  auto* dbg = dbg_iter->second;
   // Open up the image file.
   std::ifstream image_file;
   image_file.open(file_name, std::ios::in | std::ios::binary);
@@ -358,9 +359,9 @@
   return 0;
 }
 
-uint64_t RenodeAgent::Step(int32_t id, uint64_t num_to_step, int32_t *status) {
+uint64_t RenodeAgent::Step(int32_t id, uint64_t num_to_step, int32_t* status) {
   // Get the core debug if object.
-  auto *dbg = RenodeAgent::Instance()->core_dbg(id);
+  auto* dbg = RenodeAgent::Instance()->core_dbg(id);
   // Is the debug interface valid?
   if (dbg == nullptr) {
     if (status != nullptr) {
@@ -457,10 +458,10 @@
 }
 
 // Set configuration item.
-int32_t RenodeAgent::SetConfig(int32_t id, const char *config_names[],
-                               const char *config_values[], int size) {
+int32_t RenodeAgent::SetConfig(int32_t id, const char* config_names[],
+                               const char* config_values[], int size) {
   // Get the core debug interface object.
-  auto *dbg = RenodeAgent::Instance()->core_dbg(id);
+  auto* dbg = RenodeAgent::Instance()->core_dbg(id);
   // Is the debug interface valid?
   if (dbg == nullptr) {
     return -1;
@@ -476,7 +477,7 @@
 // Set irq value.
 int32_t RenodeAgent::SetIrqValue(int32_t id, int32_t irq_num, bool irq_value) {
   // Get the core debug interface object.
-  auto *dbg = RenodeAgent::Instance()->core_dbg(id);
+  auto* dbg = RenodeAgent::Instance()->core_dbg(id);
   // Is the debug interface valid?
   if (dbg == nullptr) {
     return -1;
diff --git a/mpact/sim/util/renode/renode_mpact.h b/mpact/sim/util/renode/renode_mpact.h
index 533cc81..ba0ec68 100644
--- a/mpact/sim/util/renode/renode_mpact.h
+++ b/mpact/sim/util/renode/renode_mpact.h
@@ -38,20 +38,20 @@
 // Create a debug instance, returning its id. A return value of zero indicates
 // and error. The sysbus variant of the call provides methods to perform loads
 // and stores from a memory space managed by the caller.
-int32_t construct(char *cpu_type, int32_t max_name_length);
-int32_t construct_with_sysbus(char *cpu_type, int32_t max_name_length,
-                              int32_t (*read_callback)(uint64_t, char *,
+int32_t construct(char* cpu_type, int32_t max_name_length);
+int32_t construct_with_sysbus(char* cpu_type, int32_t max_name_length,
+                              int32_t (*read_callback)(uint64_t, char*,
                                                        int32_t),
-                              int32_t (*write_callback)(uint64_t, char *,
+                              int32_t (*write_callback)(uint64_t, char*,
                                                         int32_t));
 // Connect with, or construct, a debug instance connected to a simulator with
 // the given id. A return value of zero indicates an error. The sysbus variant
 // of the call provides methods to perform loads and stores from a memory space
 // managed by the caller.
-int32_t connect(char *cpu_type, int32_t id, int32_t max_name_length);
-int32_t connect_with_sysbus(char *cpu_type, int32_t id, int32_t max_name_length,
-                            int32_t (*read_callback)(uint64_t, char *, int32_t),
-                            int32_t (*write_callback)(uint64_t, char *,
+int32_t connect(char* cpu_type, int32_t id, int32_t max_name_length);
+int32_t connect_with_sysbus(char* cpu_type, int32_t id, int32_t max_name_length,
+                            int32_t (*read_callback)(uint64_t, char*, int32_t),
+                            int32_t (*write_callback)(uint64_t, char*,
                                                       int32_t));
 // Destruct the given debug instance. A negative return value indicates an
 // error.
@@ -60,37 +60,37 @@
 int32_t get_reg_info_size(int32_t id);
 // Return the register entry with the given index. The info pointer should
 // store an object of type RenodeCpuRegister.
-int32_t get_reg_info(int32_t id, int32_t index, char *name, void *info);
+int32_t get_reg_info(int32_t id, int32_t index, char* name, void* info);
 // Use the loader to read in the given ELF executable. If the for_symbols_only
 // is true, do not write it to memory or set the PC to the entry point. The
 // memory and register initialization will be performed by ReNode. In this case
 // the file is loaded only to provide symbol lookup.
-uint64_t load_elf(int32_t id, const char *elf_file_name, bool for_symbols_only,
-                  int32_t *status);
+uint64_t load_elf(int32_t id, const char* elf_file_name, bool for_symbols_only,
+                  int32_t* status);
 // Load the content of the given file into memory, starting at the given
 // address.
-int32_t load_image(int32_t id, const char *file_name, uint64_t address);
+int32_t load_image(int32_t id, const char* file_name, uint64_t address);
 // Read register reg_id in the instance id, store the value in the pointer
 // given. A return value < 0 is an error.
-int32_t read_register(int32_t id, uint32_t reg_id, uint64_t *value);
+int32_t read_register(int32_t id, uint32_t reg_id, uint64_t* value);
 // Write register reg_id in the instance id. A return value < 0 is an error.
 int32_t write_register(int32_t id, uint32_t reg_id, uint64_t value);
 // Read/Write memory.
-uint64_t read_memory(int32_t id, uint64_t address, char *buffer,
+uint64_t read_memory(int32_t id, uint64_t address, char* buffer,
                      uint64_t length);
-uint64_t write_memory(int32_t id, uint64_t address, const char *buffer,
+uint64_t write_memory(int32_t id, uint64_t address, const char* buffer,
                       uint64_t length);
 // Reset the instance. A return value < 0 is an error.
 int32_t reset(int32_t id);
 // Step the instance id by num_to_step instructions. Return the number of
 // instructions stepped. The status is written to the pointer *status.
-uint64_t step(int32_t id, uint64_t num_to_step, int32_t *status);
+uint64_t step(int32_t id, uint64_t num_to_step, int32_t* status);
 // Set configuration items. This passes in the id, two arrays of strings (names
 // and values), and the size of the two arrays. Depending on the name of the
 // configuration item, the string will be interpreted according to the expected
 // type.
-int32_t set_config(int32_t id, const char *config_name[],
-                   const char *config_value[], int32_t size);
+int32_t set_config(int32_t id, const char* config_name[],
+                   const char* config_value[], int32_t size);
 // Set the given irq number (if valid) to the provided value.
 int32_t set_irq_value(int32_t id, int32_t irq_number, bool irq_value);
 }  // extern "C"
@@ -117,7 +117,7 @@
  public:
   constexpr static size_t kBufferSize = 64 * 1024;
   // This is a singleton class, so need a static Instance method.
-  static RenodeAgent *Instance() {
+  static RenodeAgent* Instance() {
     if (instance_ != nullptr) return instance_;
 
     instance_ = new RenodeAgent();
@@ -125,51 +125,50 @@
   }
 
   // These methods correspond to the C methods defined above.
-  int32_t Construct(char *cpu_type, int32_t max_name_length,
-                    int32_t (*read_callback)(uint64_t, char *, int32_t),
-                    int32_t (*write_callback)(uint64_t, char *, int32_t));
-  int32_t Connect(char *cpu_type, int32_t id, int32_t max_name_length,
-                  int32_t (*read_callback)(uint64_t, char *, int32_t),
-                  int32_t (*write_callback)(uint64_t, char *, int32_t));
+  int32_t Construct(char* cpu_type, int32_t max_name_length,
+                    int32_t (*read_callback)(uint64_t, char*, int32_t),
+                    int32_t (*write_callback)(uint64_t, char*, int32_t));
+  int32_t Connect(char* cpu_type, int32_t id, int32_t max_name_length,
+                  int32_t (*read_callback)(uint64_t, char*, int32_t),
+                  int32_t (*write_callback)(uint64_t, char*, int32_t));
   void Destroy(int32_t id);
   int32_t Reset(int32_t id);
   int32_t GetRegisterInfoSize(int32_t id) const;
-  int32_t GetRegisterInfo(int32_t id, int32_t index, char *name,
-                          RenodeCpuRegister *info);
-  int32_t ReadRegister(int32_t id, uint32_t reg_id, uint64_t *value);
+  int32_t GetRegisterInfo(int32_t id, int32_t index, char* name,
+                          RenodeCpuRegister* info);
+  int32_t ReadRegister(int32_t id, uint32_t reg_id, uint64_t* value);
   int32_t WriteRegister(int32_t id, uint32_t reg_id, uint64_t value);
-  uint64_t ReadMemory(int32_t id, uint64_t address, char *buffer,
+  uint64_t ReadMemory(int32_t id, uint64_t address, char* buffer,
                       uint64_t length);
-  uint64_t WriteMemory(int32_t id, uint64_t address, const char *buffer,
+  uint64_t WriteMemory(int32_t id, uint64_t address, const char* buffer,
                        uint64_t length);
 
-  uint64_t LoadExecutable(int32_t id, const char *elf_file_name,
-                          bool for_symbols_only, int32_t *status);
-  int32_t LoadImage(int32_t id, const char *file_name, uint64_t address);
-  uint64_t Step(int32_t id, uint64_t num_to_step, int32_t *status);
-  int32_t SetConfig(int32_t id, const char *config_names[],
-                    const char *config_values[], int32_t size);
+  uint64_t LoadExecutable(int32_t id, const char* elf_file_name,
+                          bool for_symbols_only, int32_t* status);
+  int32_t LoadImage(int32_t id, const char* file_name, uint64_t address);
+  uint64_t Step(int32_t id, uint64_t num_to_step, int32_t* status);
+  int32_t SetConfig(int32_t id, const char* config_names[],
+                    const char* config_values[], int32_t size);
   int32_t SetIrqValue(int32_t id, int32_t irq_number, bool irq_value);
 
   // Accessor.
-  RenodeDebugInterface *core_dbg(int32_t id) const {
+  RenodeDebugInterface* core_dbg(int32_t id) const {
     auto ptr = core_dbg_instances_.find(id);
     if (ptr != core_dbg_instances_.end()) return ptr->second;
     return nullptr;
   }
 
  private:
-  using RenodeMemoryFcn =
-      absl::AnyInvocable<int32_t(uint64_t, char *, int32_t)>;
+  using RenodeMemoryFcn = absl::AnyInvocable<int32_t(uint64_t, char*, int32_t)>;
   // Private constructor.
   RenodeAgent() = default;
-  static RenodeAgent *instance_;
+  static RenodeAgent* instance_;
   static int32_t count_;
   // Map of renode memory access interfaces used to access devices and memory
   // off the system bus.
-  absl::flat_hash_map<int32_t, RenodeMemoryAccess *> renode_memory_access_;
+  absl::flat_hash_map<int32_t, RenodeMemoryAccess*> renode_memory_access_;
   // Map of debug instances.
-  absl::flat_hash_map<int32_t, RenodeDebugInterface *> core_dbg_instances_;
+  absl::flat_hash_map<int32_t, RenodeDebugInterface*> core_dbg_instances_;
   absl::flat_hash_map<int32_t, int32_t> name_length_map_;
   absl::flat_hash_map<int32_t, uint64_t> memory_bases_;
   absl::flat_hash_map<int32_t, uint64_t> memory_sizes_;
diff --git a/mpact/sim/util/renode/socket_cli.cc b/mpact/sim/util/renode/socket_cli.cc
index a03efdc..17a158b 100644
--- a/mpact/sim/util/renode/socket_cli.cc
+++ b/mpact/sim/util/renode/socket_cli.cc
@@ -39,7 +39,7 @@
 
 using ::mpact::sim::generic::DebugCommandShellInterface;
 
-SocketCLI::SocketCLI(int port, DebugCommandShellInterface &dbg_shell,
+SocketCLI::SocketCLI(int port, DebugCommandShellInterface& dbg_shell,
                      absl::AnyInvocable<void(bool)> is_connected_cb)
     : dbg_shell_(dbg_shell), is_connected_cb_(std::move(is_connected_cb)) {
   // Set initial status as not connected.
@@ -68,7 +68,7 @@
   std::memset(&server_address_int.sin_zero, 0,
               sizeof(server_address_int.sin_zero));
   int res = bind(server_socket_,
-                 reinterpret_cast<const sockaddr *>(&server_address_int),
+                 reinterpret_cast<const sockaddr*>(&server_address_int),
                  sizeof(server_address_int));
   if (res != 0) {
     good_ = false;
diff --git a/mpact/sim/util/renode/socket_cli.h b/mpact/sim/util/renode/socket_cli.h
index 6c13822..56d4807 100644
--- a/mpact/sim/util/renode/socket_cli.h
+++ b/mpact/sim/util/renode/socket_cli.h
@@ -29,14 +29,14 @@
   // Constructor takes the port number to listen to, the top level CherIoT
   // simulator interface, and a callback to notify when the connection status
   // of the port/cli changes.
-  SocketCLI(int port, DebugCommandShellInterface &dbg_shell,
+  SocketCLI(int port, DebugCommandShellInterface& dbg_shell,
             absl::AnyInvocable<void(bool)> is_connected_cb);
   ~SocketCLI();
 
   bool good() const { return good_; }
 
  private:
-  DebugCommandShellInterface &dbg_shell_;
+  DebugCommandShellInterface& dbg_shell_;
   std::thread cli_thread_;
   bool good_ = false;
   int server_socket_ = -1;