mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-11 09:15:38 +00:00
target/arm: Tidy scr_write
Because EL3 has a fixed execution mode, we can properly decide which of the bits are RES{0,1}. Backports commit ea22747c63c9a894777aa41a7af85c3d08e39f81 from qemu
This commit is contained in:
parent
52ac2b2f7c
commit
0e08c37773
|
@ -1256,8 +1256,6 @@ static inline void xpsr_write(CPUARMState *env, uint32_t val, uint32_t mask)
|
|||
#define SCR_FIEN (1U << 21)
|
||||
#define SCR_ENSCXT (1U << 25)
|
||||
#define SCR_ATA (1U << 26)
|
||||
#define SCR_AARCH32_MASK (0x3fff & ~(SCR_RW | SCR_ST))
|
||||
#define SCR_AARCH64_MASK (0x3fff & ~SCR_NET)
|
||||
|
||||
/* Return the current FPSCR value. */
|
||||
uint32_t vfp_get_fpscr(CPUARMState *env);
|
||||
|
|
|
@ -1143,11 +1143,15 @@ static void vbar_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
|||
|
||||
static void scr_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value)
|
||||
{
|
||||
/* We only mask off bits that are RES0 both for AArch64 and AArch32.
|
||||
* For bits that vary between AArch32/64, code needs to check the
|
||||
* current execution mode before directly using the feature bit.
|
||||
*/
|
||||
uint32_t valid_mask = SCR_AARCH64_MASK | SCR_AARCH32_MASK;
|
||||
/* Begin with base v8.0 state. */
|
||||
uint32_t valid_mask = 0x3fff;
|
||||
|
||||
if (arm_el_is_aa64(env, 3)) {
|
||||
value |= SCR_FW | SCR_AW; /* these two bits are RES1. */
|
||||
valid_mask &= ~SCR_NET;
|
||||
} else {
|
||||
valid_mask &= ~(SCR_RW | SCR_ST);
|
||||
}
|
||||
|
||||
if (!arm_feature(env, ARM_FEATURE_EL2)) {
|
||||
valid_mask &= ~SCR_HCE;
|
||||
|
|
Loading…
Reference in a new issue