diff --git a/qemu/target/arm/cpu.h b/qemu/target/arm/cpu.h index 6c9be9bf..aa562104 100644 --- a/qemu/target/arm/cpu.h +++ b/qemu/target/arm/cpu.h @@ -193,6 +193,13 @@ typedef struct ARMVectorReg { uint64_t QEMU_ALIGNED(16, d[2 * ARM_MAX_VQ]); } ARMVectorReg; +/* In AArch32 mode, predicate registers do not exist at all. */ +#ifdef TARGET_AARCH64 +typedef struct ARMPredicateReg { + uint64_t QEMU_ALIGNED(16, p[2 * ARM_MAX_VQ / 8]); +} ARMPredicateReg; +#endif + typedef struct CPUARMState { /* Regs for current mode. */ uint32_t regs[16]; @@ -519,6 +526,11 @@ typedef struct CPUARMState { struct { ARMVectorReg zregs[32]; +#ifdef TARGET_AARCH64 + /* Store FFR as pregs[16] to make it easier to treat as any other. */ + ARMPredicateReg pregs[17]; +#endif + uint32_t xregs[16]; /* We store these fpcsr fields separately for convenience. */ int vec_len;