target/riscv/cpu.c: remove riscv_cpu_enable_named_feat()
Deprecate riscv_cpu_enable_named_feat() by creating implied rules for 'sha' and 'ssstateen'. 'zic64' is always true given that our default block size is set to 64. With this change we homogeneize extension handling when enabling profiles. Signed-off-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260512032926.1978818-7-daniel.barboza@oss.qualcomm.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Daniel Henrique Barboza committed
May 12, 2026 at 00:29 UTC
48dda4700faf13356b97200791e0b7ac04476c7a
2 files changed
+23
-42
target/riscv/cpu.c
+23
-2
@@ -2599,6 +2599,17 @@ static RISCVCPUImpliedExtsRule ZVKSG_IMPLIED = {
2599
},
2600
};
2601
2602
+static RISCVCPUImpliedExtsRule SHA_IMPLIED = {
2603
+ .ext = CPU_CFG_OFFSET(ext_sha),
2604
+ .implied_misa_exts = RVH,
2605
+ .implied_multi_exts = {
2606
+ CPU_CFG_OFFSET(ext_smstateen),
2607
+ CPU_CFG_OFFSET(ext_ssstateen),
2608
+
2609
+ RISCV_IMPLIED_EXTS_RULE_END
2610
+ },
2611
+};
2612
+
2613
static RISCVCPUImpliedExtsRule SSCFG_IMPLIED = {
2614
.ext = CPU_CFG_OFFSET(ext_ssccfg),
2615
.implied_multi_exts = {
@@ -2647,6 +2658,15 @@ static RISCVCPUImpliedExtsRule SSCTR_IMPLIED = {
2658
},
2659
};
2660
2661
+static RISCVCPUImpliedExtsRule SSSTATEEN_IMPLIED = {
2662
+ .ext = CPU_CFG_OFFSET(ext_ssstateen),
2663
+ .implied_multi_exts = {
2664
+ CPU_CFG_OFFSET(ext_smstateen),
2665
+
2666
+ RISCV_IMPLIED_EXTS_RULE_END
2667
+ },
2668
+};
2669
+
2670
static RISCVCPUImpliedExtsRule ZVFBFA_IMPLIED = {
2671
.ext = CPU_CFG_OFFSET(ext_zvfbfa),
2672
.implied_multi_exts = {
@@ -2673,8 +2693,9 @@ RISCVCPUImpliedExtsRule *riscv_multi_ext_implied_rules[] = {
2693
&ZVFBFA_IMPLIED, &ZVFBFMIN_IMPLIED, &ZVFBFWMA_IMPLIED,
2694
&ZVFH_IMPLIED, &ZVFHMIN_IMPLIED, &ZVKN_IMPLIED,
2695
&ZVKNC_IMPLIED, &ZVKNG_IMPLIED, &ZVKNHB_IMPLIED,
2676
- &ZVKS_IMPLIED, &ZVKSC_IMPLIED, &ZVKSG_IMPLIED, &SSCFG_IMPLIED,
2677
- &SUPM_IMPLIED, &SSPM_IMPLIED, &SMCTR_IMPLIED, &SSCTR_IMPLIED,
2696
+ &ZVKS_IMPLIED, &ZVKSC_IMPLIED, &ZVKSG_IMPLIED, &SHA_IMPLIED,
2697
+ &SSCFG_IMPLIED, &SUPM_IMPLIED, &SSPM_IMPLIED, &SMCTR_IMPLIED,
2698
+ &SSCTR_IMPLIED, &SSSTATEEN_IMPLIED,
2699
NULL
2700
};
2701
target/riscv/tcg/tcg-cpu.c
-40
@@ -322,42 +322,6 @@ static const char *cpu_cfg_ext_get_name(uint32_t ext_offset)
322
g_assert_not_reached();
323
}
324
325
-static bool cpu_cfg_offset_is_named_feat(uint32_t ext_offset)
326
-{
327
- const RISCVCPUMultiExtConfig *feat;
328
-
329
- for (feat = riscv_cpu_named_features; feat->name != NULL; feat++) {
330
- if (feat->offset == ext_offset) {
331
- return true;
332
- }
333
- }
334
-
335
- return false;
336
-}
337
-
338
-static void riscv_cpu_enable_named_feat(RISCVCPU *cpu, uint32_t feat_offset)
339
-{
340
- /*
341
- * All other named features are already enabled
342
- * in riscv_tcg_cpu_instance_init().
343
- */
344
- switch (feat_offset) {
345
- case CPU_CFG_OFFSET(ext_zic64b):
346
- cpu->cfg.cbom_blocksize = 64;
347
- cpu->cfg.cbop_blocksize = 64;
348
- cpu->cfg.cboz_blocksize = 64;
349
- break;
350
- case CPU_CFG_OFFSET(ext_sha):
351
- if (!cpu_misa_ext_is_user_set(RVH)) {
352
- riscv_cpu_write_misa_bit(cpu, RVH, true);
353
- }
354
- /* fallthrough */
355
- case CPU_CFG_OFFSET(ext_ssstateen):
356
- cpu->cfg.ext_smstateen = true;
357
- break;
358
- }
359
-}
360
-
325
static void cpu_bump_multi_ext_priv_ver(CPURISCVState *env,
326
uint32_t ext_offset)
327
{
@@ -1327,10 +1291,6 @@ static void riscv_cpu_set_profile(RISCVCPU *cpu,
1291
ext_offset = profile->ext_offsets[i];
1292
1293
if (profile->enabled) {
1330
- if (cpu_cfg_offset_is_named_feat(ext_offset)) {
1331
- riscv_cpu_enable_named_feat(cpu, ext_offset);
1332
- }
1333
-
1294
cpu_bump_multi_ext_priv_ver(&cpu->env, ext_offset);
1295
}
1296