From 340cdcc7578b51af4cd64fcea1658b7dd34f6659 Mon Sep 17 00:00:00 2001 From: Jerry Zhang Jian Date: Thu, 30 Apr 2026 23:24:47 -0700 Subject: [PATCH] fixup! Refactor ISA parser extension handling Signed-off-by: Jerry Zhang Jian --- disasm/isa_parser.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/disasm/isa_parser.cc b/disasm/isa_parser.cc index 06d74f88..03f7cb5c 100644 --- a/disasm/isa_parser.cc +++ b/disasm/isa_parser.cc @@ -57,12 +57,15 @@ struct extension_info_t { std::vector enables; std::vector implies; + // `enables` sets extension_table bits directly + // `implies` recursively parses and applies other named extensions extension_info_t(const char* name, std::initializer_list enables = {}, std::initializer_list implies = {}) : name(name), enables(enables), implies(implies) {} }; +// if every extension in components is set, also set the enable struct extension_combination_t { unsigned enable; std::vector components; @@ -72,8 +75,10 @@ struct extension_combination_t { : enable(enable), components(components) {} }; -// Entries without enables are accepted ISA names whose behavior is always present -// in Spike, currently unmodeled, or handled by later parser checks. +// Entries without enables set no extension_table bits directly. This is either +// because no dedicated EXT_* bit exists for them (their full effect is expressed +// through their implies chain), or because their behavior is always present in +// Spike, is currently unmodeled, or is handled by later parser checks. static const extension_info_t extension_infos[] = { {"i", {'I'}}, {"e", {'E'}},