Revision e160c51c
b/target-arm/translate.c | ||
---|---|---|
2478 | 2478 |
/* Return the mask of PSR bits set by a MSR instruction. */ |
2479 | 2479 |
static uint32_t msr_mask(CPUState *env, DisasContext *s, int flags, int spsr) { |
2480 | 2480 |
uint32_t mask; |
2481 |
uint32_t reserved; |
|
2482 | 2481 |
|
2483 | 2482 |
mask = 0; |
2484 | 2483 |
if (flags & (1 << 0)) |
... | ... | |
2493 | 2492 |
/* Mask out undefined bits. */ |
2494 | 2493 |
mask &= ~CPSR_RESERVED; |
2495 | 2494 |
if (!arm_feature(env, ARM_FEATURE_V6)) |
2496 |
reserved &= ~(CPSR_E | CPSR_GE);
|
|
2495 |
mask &= ~(CPSR_E | CPSR_GE);
|
|
2497 | 2496 |
if (!arm_feature(env, ARM_FEATURE_THUMB2)) |
2498 |
reserved &= ~CPSR_IT;
|
|
2497 |
mask &= ~CPSR_IT;
|
|
2499 | 2498 |
/* Mask out execution state bits. */ |
2500 | 2499 |
if (!spsr) |
2501 |
reserved &= ~CPSR_EXEC;
|
|
2500 |
mask &= ~CPSR_EXEC;
|
|
2502 | 2501 |
/* Mask out privileged bits. */ |
2503 | 2502 |
if (IS_USER(s)) |
2504 | 2503 |
mask &= CPSR_USER; |
Also available in: Unified diff