From 18ec74480a04c0f89879ce6fe518c0b18dac7fd9 Mon Sep 17 00:00:00 2001 From: piotro888 Date: Mon, 3 Jul 2023 15:04:01 +0200 Subject: [PATCH] Fix isa string generation (#424) --- coreblocks/params/isa.py | 5 +++++ coreblocks/params/optypes.py | 5 +++-- test/params/test_configurations.py | 11 ++++------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/coreblocks/params/isa.py b/coreblocks/params/isa.py index 587b423a9..07aef6390 100644 --- a/coreblocks/params/isa.py +++ b/coreblocks/params/isa.py @@ -261,6 +261,11 @@ class Extension(enum.IntFlag): Extension.B: Extension.ZBA | Extension.ZBB | Extension.ZBC | Extension.ZBS, } +# Extensions (not aliases) that only imply other sub-extensions, but don't add any new OpTypes. +extension_only_implies = { + Extension.B, +} + class ISA: """ diff --git a/coreblocks/params/optypes.py b/coreblocks/params/optypes.py index f8da37490..413fd3ad8 100644 --- a/coreblocks/params/optypes.py +++ b/coreblocks/params/optypes.py @@ -1,7 +1,7 @@ from enum import IntEnum, auto, unique from coreblocks.params import Extension -from coreblocks.params.isa import extension_implications +from coreblocks.params.isa import extension_implications, extension_only_implies @unique @@ -117,7 +117,8 @@ def optypes_required_by_extensions( implied_extensions = Extension(0) for ext in Extension: if ext in extensions: - if ext in extension_implications and ext in optypes_by_extensions: + # check if extensions has implications, but skip if we don't have defined any optypes for it yet + if ext in extension_implications and (ext in optypes_by_extensions or ext in extension_only_implies): implied_extensions |= extension_implications[ext] extensions |= implied_extensions diff --git a/test/params/test_configurations.py b/test/params/test_configurations.py index e957bac38..66986b6ec 100644 --- a/test/params/test_configurations.py +++ b/test/params/test_configurations.py @@ -17,12 +17,7 @@ class ISAStrTest: TEST_CASES = [ ISAStrTest(basic_core_config, "rv32i", "rv32", "rv32i"), - ISAStrTest( - full_core_config, - "rv32imzicsr_zba_zbb_zbc_zbs", - "rv32mzicsr_zba_zbb_zbc_zbs", - "rv32imczicsr_zba_zbb_zbc_zbs", - ), + ISAStrTest(full_core_config, "rv32imcbzicsr", "rv32mcbzicsr", "rv32imcbzicsr"), ISAStrTest(tiny_core_config, "rv32i", "rv32", "rv32i"), ISAStrTest(test_core_config, "rv32", "rv32", "rv32i"), ] @@ -34,7 +29,9 @@ def test_isa_str_gp(self): def test_isa_str_raw(self): for test in self.TEST_CASES: - partial, full = extensions_supported(test.core_config.func_units_config) + partial, full = extensions_supported( + test.core_config.func_units_config, test.core_config.embedded, test.core_config.compressed + ) partial = gen_isa_string(partial, 32) full = gen_isa_string(full, 32)