mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-06-20 15:37:50 +00:00
target/arm: Add state for the ARMv8.3-PAuth extension
Add storage space for the 5 encryption keys. Backports commit 991ad91b6a1f09a6ad62b6e6da78d83b548daec7 from qemu
This commit is contained in:
parent
f2682ff309
commit
8ef39cc2d5
|
@ -192,11 +192,16 @@ typedef struct ARMVectorReg {
|
||||||
uint64_t QEMU_ALIGNED(16, d[2 * ARM_MAX_VQ]);
|
uint64_t QEMU_ALIGNED(16, d[2 * ARM_MAX_VQ]);
|
||||||
} ARMVectorReg;
|
} ARMVectorReg;
|
||||||
|
|
||||||
/* In AArch32 mode, predicate registers do not exist at all. */
|
|
||||||
#ifdef TARGET_AARCH64
|
#ifdef TARGET_AARCH64
|
||||||
|
/* In AArch32 mode, predicate registers do not exist at all. */
|
||||||
typedef struct ARMPredicateReg {
|
typedef struct ARMPredicateReg {
|
||||||
uint64_t QEMU_ALIGNED(16, p[2 * ARM_MAX_VQ / 8]);
|
uint64_t QEMU_ALIGNED(16, p[2 * ARM_MAX_VQ / 8]);
|
||||||
} ARMPredicateReg;
|
} ARMPredicateReg;
|
||||||
|
|
||||||
|
/* In AArch32 mode, PAC keys do not exist at all. */
|
||||||
|
typedef struct ARMPACKey {
|
||||||
|
uint64_t lo, hi;
|
||||||
|
} ARMPACKey;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -596,6 +601,14 @@ typedef struct CPUARMState {
|
||||||
uint32_t cregs[16];
|
uint32_t cregs[16];
|
||||||
} iwmmxt;
|
} iwmmxt;
|
||||||
|
|
||||||
|
#ifdef TARGET_AARCH64
|
||||||
|
ARMPACKey apia_key;
|
||||||
|
ARMPACKey apib_key;
|
||||||
|
ARMPACKey apda_key;
|
||||||
|
ARMPACKey apdb_key;
|
||||||
|
ARMPACKey apga_key;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_USER_ONLY)
|
#if defined(CONFIG_USER_ONLY)
|
||||||
/* For usermode syscall translation. */
|
/* For usermode syscall translation. */
|
||||||
int eabi;
|
int eabi;
|
||||||
|
@ -3248,6 +3261,21 @@ static inline bool isar_feature_aa64_fcma(const ARMISARegisters *id)
|
||||||
return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, FCMA) != 0;
|
return FIELD_EX64(id->id_aa64isar1, ID_AA64ISAR1, FCMA) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool isar_feature_aa64_pauth(const ARMISARegisters *id)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Note that while QEMU will only implement the architected algorithm
|
||||||
|
* QARMA, and thus APA+GPA, the host cpu for kvm may use implementation
|
||||||
|
* defined algorithms, and thus API+GPI, and this predicate controls
|
||||||
|
* migration of the 128-bit keys.
|
||||||
|
*/
|
||||||
|
return (id->id_aa64isar1 &
|
||||||
|
(FIELD_DP64(0, ID_AA64ISAR1, APA, 0xf) |
|
||||||
|
FIELD_DP64(0, ID_AA64ISAR1, API, 0xf) |
|
||||||
|
FIELD_DP64(0, ID_AA64ISAR1, GPA, 0xf) |
|
||||||
|
FIELD_DP64(0, ID_AA64ISAR1, GPI, 0xf))) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline bool isar_feature_aa64_fp16(const ARMISARegisters *id)
|
static inline bool isar_feature_aa64_fp16(const ARMISARegisters *id)
|
||||||
{
|
{
|
||||||
/* We always set the AdvSIMD and FP fields identically wrt FP16. */
|
/* We always set the AdvSIMD and FP fields identically wrt FP16. */
|
||||||
|
|
Loading…
Reference in a new issue