target-arm: Avoid "1 << 31" undefined behaviour
Avoid the undefined behaviour of "1 << 31" by using 1U to make the shift be of an unsigned value rather than shifting into the sign bit of a signed integer. For consistency, we make all the CPSR_* constants unsigned, though the only one which triggers undefined behaviour is CPSR_N. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <rth@twiddle.net> Message-id: 1378391908-22137-3-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
534df15609
commit
78dbbbe4df
@ -270,22 +270,22 @@ int cpu_arm_handle_mmu_fault (CPUARMState *env, target_ulong address, int rw,
|
||||
int mmu_idx);
|
||||
#define cpu_handle_mmu_fault cpu_arm_handle_mmu_fault
|
||||
|
||||
#define CPSR_M (0x1f)
|
||||
#define CPSR_T (1 << 5)
|
||||
#define CPSR_F (1 << 6)
|
||||
#define CPSR_I (1 << 7)
|
||||
#define CPSR_A (1 << 8)
|
||||
#define CPSR_E (1 << 9)
|
||||
#define CPSR_IT_2_7 (0xfc00)
|
||||
#define CPSR_GE (0xf << 16)
|
||||
#define CPSR_RESERVED (0xf << 20)
|
||||
#define CPSR_J (1 << 24)
|
||||
#define CPSR_IT_0_1 (3 << 25)
|
||||
#define CPSR_Q (1 << 27)
|
||||
#define CPSR_V (1 << 28)
|
||||
#define CPSR_C (1 << 29)
|
||||
#define CPSR_Z (1 << 30)
|
||||
#define CPSR_N (1 << 31)
|
||||
#define CPSR_M (0x1fU)
|
||||
#define CPSR_T (1U << 5)
|
||||
#define CPSR_F (1U << 6)
|
||||
#define CPSR_I (1U << 7)
|
||||
#define CPSR_A (1U << 8)
|
||||
#define CPSR_E (1U << 9)
|
||||
#define CPSR_IT_2_7 (0xfc00U)
|
||||
#define CPSR_GE (0xfU << 16)
|
||||
#define CPSR_RESERVED (0xfU << 20)
|
||||
#define CPSR_J (1U << 24)
|
||||
#define CPSR_IT_0_1 (3U << 25)
|
||||
#define CPSR_Q (1U << 27)
|
||||
#define CPSR_V (1U << 28)
|
||||
#define CPSR_C (1U << 29)
|
||||
#define CPSR_Z (1U << 30)
|
||||
#define CPSR_N (1U << 31)
|
||||
#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
|
||||
|
||||
#define CPSR_IT (CPSR_IT_0_1 | CPSR_IT_2_7)
|
||||
|
@ -972,7 +972,7 @@ static int par_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value)
|
||||
static inline bool extended_addresses_enabled(CPUARMState *env)
|
||||
{
|
||||
return arm_feature(env, ARM_FEATURE_LPAE)
|
||||
&& (env->cp15.c2_control & (1 << 31));
|
||||
&& (env->cp15.c2_control & (1U << 31));
|
||||
}
|
||||
|
||||
static int ats_write(CPUARMState *env, const ARMCPRegInfo *ri, uint64_t value)
|
||||
@ -1385,7 +1385,7 @@ static int mpidr_read(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||
* so these bits always RAZ.
|
||||
*/
|
||||
if (arm_feature(env, ARM_FEATURE_V7MP)) {
|
||||
mpidr |= (1 << 31);
|
||||
mpidr |= (1U << 31);
|
||||
/* Cores which are uniprocessor (non-coherent)
|
||||
* but still implement the MP extensions set
|
||||
* bit 30. (For instance, A9UP.) However we do
|
||||
|
Loading…
Reference in New Issue
Block a user