On 1/27/23 05:07, Jean-Philippe Brucker wrote:
+static void rme_get_uint32(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + RmeGuest *guest = RME_GUEST(obj); + uint32_t value; + + if (strcmp(name, "sve-vector-length") == 0) { + value = guest->sve_vl; + } else { + g_assert_not_reached(); + } + + visit_type_uint32(v, name, &value, errp); +} + +static void rme_set_uint32(Object *obj, Visitor *v, const char *name, + void *opaque, Error **errp) +{ + RmeGuest *guest = RME_GUEST(obj); + uint32_t max_value; + uint32_t value; + uint32_t *var; + + if (!visit_type_uint32(v, name, &value, errp)) { + return; + } + + if (strcmp(name, "sve-vector-length") == 0) { + max_value = ARM_MAX_VQ * 128; + var = &guest->sve_vl; + if (value & 0x7f) { + error_setg(errp, "invalid SVE vector length %"PRIu32, value); + return; + } + } else { + g_assert_not_reached(); + } + + if (value >= max_value) { + error_setg(errp, "invalid %s length %"PRIu32, name, value); + return; + } + + *var = value; +}
I don't think you should try to genericize these functions, comparing the name string. Just rename them and let them be specific to SVE.
r~