> On 16 Sep 2026, at 8:15 PM, Eric Auger <[email protected]> wrote:
> 
> +
> +/*
> + * decode_idreg_writemap: Generate props for writable fields
> + *
> + * @obj: CPU object
> + * @reg: description of the sysreg
> + */
> +static int
> +decode_idreg_writemap(Object *obj, ARM64SysReg *reg)
> +{
> +    uint64_t map = reg->writable_mask;
> +    int i = ctz64(map);
> +    int nb_sysreg_props = 0;
> +
> +    while (map) {
> +        ARM64SysRegField *field = get_field(i, reg);
> +        int lower, upper;
> +        char *prop_name;
> +        uint64_t field_mask;
> +
> +        if (!field) {
> +            warn_report("%s bit %d of %s is writable but no named field "
> +                        "in target/arm/cpu-idregs.h.inc",
> +                        __func__, i, reg->name);
> +            map =  map & ~BIT_ULL(i);
> +            i = ctz64(map);
> +            continue;
> +        }
> +        lower = field->shift;
> +        upper = field->shift + field->length - 1;
> +        prop_name = g_strdup_printf("SYSREG_%s_%s", reg->name, field->name);
> +        trace_decode_idreg_writemap(field->name, lower, upper, prop_name);
> +        object_property_add(obj, prop_name, "uint64",
> +                            get_sysreg_prop, set_sysreg_prop, NULL, field);
> +        g_free(prop_name);
> +        nb_sysreg_props++;
> +
> +        field_mask = MAKE_64BIT_MASK(lower, field->length);
> +        map = map & ~field_mask;
> +        i = ctz64(map);
> +    }
> +    trace_nb_sysreg_props(reg->name, nb_sysreg_props);
> +    return 0;
> +}
> +

We can try field based handling, it is more elegant.
- for each field, check if not RES and writable.

<Though I will argue that all fields should be present not just writable :)>



Reply via email to