No public description PiperOrigin-RevId: 992520685 Change-Id: I77b5a17ab8aeb9f4bcc377230efb9ee68b0eb5a9
diff --git a/mpact/sim/decoder/instruction_set_visitor.cc b/mpact/sim/decoder/instruction_set_visitor.cc index 8cd97f2..1e6a02b 100644 --- a/mpact/sim/decoder/instruction_set_visitor.cc +++ b/mpact/sim/decoder/instruction_set_visitor.cc
@@ -835,6 +835,9 @@ if (ctx->SIZE() != nullptr) { // Default size. int value = std::stoi(ctx->NUMBER()->getText(), nullptr, 0); slot->set_default_instruction_size(value); + if (slot->default_instruction() != nullptr) { + slot->default_instruction()->opcode()->set_instruction_size(value); + } return; } if (ctx->LATENCY() != nullptr) { // Default latency. @@ -876,6 +879,8 @@ } auto* default_instruction = new Instruction( slot->instruction_set()->opcode_factory()->CreateDefaultOpcode(), slot); + default_instruction->opcode()->set_instruction_size( + slot->default_instruction_size()); bool has_disasm = false; bool has_semfunc = false; for (auto* attribute : ctx->opcode_attribute_list()->opcode_attribute()) {
diff --git a/mpact/sim/decoder/opcode.h b/mpact/sim/decoder/opcode.h index 6bee33c..0ba86bb 100644 --- a/mpact/sim/decoder/opcode.h +++ b/mpact/sim/decoder/opcode.h
@@ -276,7 +276,7 @@ private: Opcode(absl::string_view name, int value); - int instruction_size_; + int instruction_size_ = 0; Opcode* child_ = nullptr; Opcode* parent_ = nullptr; std::string predicate_op_name_;
diff --git a/mpact/sim/decoder/slot.cc b/mpact/sim/decoder/slot.cc index bb348c8..2361721 100644 --- a/mpact/sim/decoder/slot.cc +++ b/mpact/sim/decoder/slot.cc
@@ -1284,7 +1284,10 @@ GenerateResourceSetter(default_instruction_, encoding_type), ",\n", " ", GenerateAttributeSetter(default_instruction_), ",\n", " SemFuncSetter{", default_instruction_->semfunc_code_string(), "}, ", - default_instruction_->opcode()->instruction_size(), "}),\n"); + default_instruction_->opcode()->instruction_size() == 0 + ? default_instruction_size() + : default_instruction_->opcode()->instruction_size(), + "}),\n"); for (auto const& [unused, inst_ptr] : instruction_map_) { auto* instruction = inst_ptr; std::string opcode_name = instruction->opcode()->pascal_name();