From: Frank Chang <[email protected]> Add the missing implied rule for standard B extension. Standard B extension implies Zba, Zbb, Zbs extensions. We can also remove the auto-enables in riscv_cpu_validate_b() as Zba, Zbb, Zbs extensions can be enabled by the implied rule.
RISC-V B spec: https://github.com/riscv/riscv-b Reviewed-by: Jerry Zhang Jian <[email protected]> Reviewed-by: Jim Shu <[email protected]> Reviewed-by: Alistair Francis <[email protected]> Reviewed-by: Daniel Henrique Barboza <[email protected]> Signed-off-by: Frank Chang <[email protected]> Signed-off-by: Frank Chang <[email protected]> --- target/riscv/cpu.c | 14 +++++++++++++- target/riscv/tcg/tcg-cpu.c | 18 +++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 4246fb87c64..d1452d91f2a 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -2106,6 +2106,17 @@ static RISCVCPUImpliedExtsRule RVG_IMPLIED = { }, }; +static RISCVCPUImpliedExtsRule RVB_IMPLIED = { + .is_misa = true, + .ext = RVB, + .implied_multi_exts = { + CPU_CFG_OFFSET(ext_zba), CPU_CFG_OFFSET(ext_zbb), + CPU_CFG_OFFSET(ext_zbs), + + RISCV_IMPLIED_EXTS_RULE_END + }, +}; + static RISCVCPUImpliedExtsRule ZCB_IMPLIED = { .ext = CPU_CFG_OFFSET(ext_zcb), .implied_multi_exts = { @@ -2513,7 +2524,8 @@ static RISCVCPUImpliedExtsRule ZVFBFA_IMPLIED = { RISCVCPUImpliedExtsRule *riscv_misa_ext_implied_rules[] = { &RVA_IMPLIED, &RVD_IMPLIED, &RVF_IMPLIED, - &RVM_IMPLIED, &RVV_IMPLIED, &RVG_IMPLIED, NULL + &RVM_IMPLIED, &RVV_IMPLIED, &RVG_IMPLIED, + &RVB_IMPLIED, NULL }; RISCVCPUImpliedExtsRule *riscv_multi_ext_implied_rules[] = { diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index 66ac011c54d..d26d9001bd2 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -515,27 +515,15 @@ static void riscv_cpu_validate_b(RISCVCPU *cpu) const char *warn_msg = "RVB mandates disabled extension %s"; if (!cpu->cfg.ext_zba) { - if (!cpu_cfg_ext_is_user_set(CPU_CFG_OFFSET(ext_zba))) { - cpu->cfg.ext_zba = true; - } else { - warn_report(warn_msg, "zba"); - } + warn_report(warn_msg, "zba"); } if (!cpu->cfg.ext_zbb) { - if (!cpu_cfg_ext_is_user_set(CPU_CFG_OFFSET(ext_zbb))) { - cpu->cfg.ext_zbb = true; - } else { - warn_report(warn_msg, "zbb"); - } + warn_report(warn_msg, "zbb"); } if (!cpu->cfg.ext_zbs) { - if (!cpu_cfg_ext_is_user_set(CPU_CFG_OFFSET(ext_zbs))) { - cpu->cfg.ext_zbs = true; - } else { - warn_report(warn_msg, "zbs"); - } + warn_report(warn_msg, "zbs"); } } -- 2.43.0
