Hi, On 6/27/19 12:46 PM, Andrew Jones wrote: > On Wed, Jun 26, 2019 at 06:56:54PM +0200, Auger Eric wrote: >>> diff --git a/target/arm/helper.c b/target/arm/helper.c >>> index f500ccb6d31b..b7b719dba57f 100644 >>> --- a/target/arm/helper.c >>> +++ b/target/arm/helper.c >>> @@ -5324,7 +5324,16 @@ static void zcr_write(CPUARMState *env, const >>> ARMCPRegInfo *ri, >>> >>> /* Bits other than [3:0] are RAZ/WI. */ >>> QEMU_BUILD_BUG_ON(ARM_MAX_VQ > 16); >>> - raw_write(env, ri, value & 0xf); >>> + value &= 0xf; >>> + >>> + if (value) { >>> + /* get next vq that is smaller than or equal to value's vq */ >>> + uint32_t vq = value + 1; >>> + vq = arm_cpu_vq_map_next_smaller(cpu, vq + 1); >>> + value = vq - 1; >> spec says: >> >> "if an unsupported vector length is requested in ZCR_ELx, the >> implementation is required to select the largest >> supported vector length that is less than the requested length. This >> does not alter the value of ZCR_ELx.LEN. >> " >> >> So I understand the value written in the reg should not be unmodified. >> > > Sorry, I can't parse what you're trying to tell me here. Here we have > to write 'value', because that's what the guest is trying to do. As the > spec says in your quote, we have to pick the length the guest wants, or > the next smaller valid one, so that's what the code above does. So are > you just stating that you agree with this hunk of the code? What we are writing into the reg is arm_cpu_vq_map_next_smaller(cpu, vq + 1) -1. Maybe I misunderstand the whole wording but I would have expected the original unmodified value to be written in the reg instead?
Thanks Eric > > Thanks, > drew >