On Tue, May 12, 2026 at 1:31 PM Daniel Henrique Barboza
<[email protected]> wrote:
>
> The non-standard extensions, in this particular function the vendor
> extensions, are all riscv,isa names that starts with 'x'.
>
> In theory this is a bit slower than using riscv_cpu_vendor_exts
> (isa_edata_arr is longer) but riscv_cpu_update_misa_x() is executed only
> once during finalize(), i.e. not a hot path.  We're accepting a tiny
> performance hit as as a tradeoff for the code simplication we'll have
> later by removing all riscv_cpu_* arrays.
>
> Signed-off-by: Daniel Henrique Barboza <[email protected]>

Acked-by: Alistair Francis <[email protected]>

Alistair

> ---
>  target/riscv/tcg/tcg-cpu.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c
> index 8dea22bae5..b7d59f40f2 100644
> --- a/target/riscv/tcg/tcg-cpu.c
> +++ b/target/riscv/tcg/tcg-cpu.c
> @@ -1155,10 +1155,11 @@ static void riscv_cpu_update_misa_c(RISCVCPU *cpu)
>  static void riscv_cpu_update_misa_x(RISCVCPU *cpu)
>  {
>      CPURISCVState *env = &cpu->env;
> -    const RISCVCPUMultiExtConfig *arr = riscv_cpu_vendor_exts;
> +    const RISCVIsaExtData *edata;
>
> -    for (int i = 0; arr[i].name != NULL; i++) {
> -        if (isa_ext_is_enabled(cpu, arr[i].offset)) {
> +    for (edata = isa_edata_arr; edata && edata->name; edata++) {
> +        if (edata->name[0] == 'x'
> +            && isa_ext_is_enabled(cpu, edata->ext_enable_offset)) {
>              riscv_cpu_set_misa_ext(env, env->misa_ext | RVX);
>              break;
>          }
> --
> 2.43.0
>
>

Reply via email to