+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;
+}