fix(sve): represent sve Z0-31 registers as array of bytes
Currently each Z register is type defined as sve_vector_t but the helper
routine to write or read Z registers works based on current vector
length.
If test case defines 'sve_vector_t zregs[32]' and reads all Z registers
using sve_read_vector_regs() then zregs[n] might not corresponds to Zn
register unless the vector length is set to max value.
This patch also renames sve_vector_length_get() to sve_rdvl_1()
Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com>
Change-Id: I42955f8009bdd7f40d74c5a8d21d7c16ce6d761e
diff --git a/realm/realm_sve.c b/realm/realm_sve.c
index b41e23d..098cf4c 100644
--- a/realm/realm_sve.c
+++ b/realm/realm_sve.c
@@ -21,7 +21,7 @@
static int rl_sve_op_1[RL_SVE_OP_ARRAYSIZE];
static int rl_sve_op_2[RL_SVE_OP_ARRAYSIZE];
-static sve_vector_t rl_sve_vectors_write[SVE_NUM_VECTORS] __aligned(16);
+static sve_z_regs_t rl_sve_z_regs_write;
static int volatile realm_got_undef_abort;
@@ -37,7 +37,7 @@
memset((void *)output, 0, sizeof(struct sve_cmd_rdvl));
sve_config_vq(SVE_VQ_ARCH_MAX);
- output->rdvl = sve_vector_length_get();
+ output->rdvl = sve_rdvl_1();
return true;
}
@@ -124,10 +124,10 @@
/* Config Realm with max SVE length */
sve_config_vq(SVE_VQ_ARCH_MAX);
- vl = sve_vector_length_get();
+ vl = sve_rdvl_1();
- memset((void *)&rl_sve_vectors_write, 0xcd, vl * SVE_NUM_VECTORS);
- sve_fill_vector_regs(rl_sve_vectors_write);
+ memset((void *)&rl_sve_z_regs_write, 0xcd, vl * SVE_NUM_VECTORS);
+ sve_z_regs_write(&rl_sve_z_regs_write);
return true;
}