ARM R4 Computer Hardware User Manual


 
Programmer’s Model
ARM DDI 0363E Copyright © 2009 ARM Limited. All rights reserved. 2-14
ID013010 Non-Confidential, Unrestricted Access
2.7.11 The M bits
M[4:0] are the mode bits. These bits determine the processor operating mode as Table 2-3
shows.
Note
In Privileged mode an illegal value programmed into M[4:0] causes the processor to enter
System mode.
In User mode M[4:0] can be read. Writes to M[4:0] are ignored.
2.7.12 Modification of PSR bits by MSR instructions
In architecture versions earlier than ARMv6,
MSR
instructions can modify the flags byte, bits
[31:24], of the CPSR in any mode, but the other three bytes are only modifiable in Privileged
modes.
In the ARMv7-R architecture each CPSR bit falls into one of these categories:
Bits that are freely modifiable from any mode, either directly by
MSR
instructions or by
other instructions whose side-effects include writing the specific bit or writing the entire
CPSR.
Bits in Figure 2-4 on page 2-10 that are in this category are N, Z, C, V, Q, GE[3:0], and E.
Bits that an
MSR
instruction must never modify, and so must only be written as a side-effect
of another instruction. If an
MSR
instruction tries to modify these bits, the results are
architecturally Unpredictable. In the processor these bits are not affected.
The bits in Figure 2-4 on page 2-10 that are in this category are the execution state bits
[26:24], [15:10], and [5].
Bits that can only be modified from Privileged modes, and that instructions completely
protect from modification while the processor is in User mode. Entering a processor
exception is the only way to modify these bits while the processor is in User mode, as
described in Exceptions on page 2-16.
Table 2-3 PSR mode bit values
M[4:0] Mode
Visible state registers
Thumb ARM
b10000 User R0–R7, R8-R12, SP, LR, PC, CPSR R0–R14, PC, CPSR
b10001 FIQ R0–R7, R8_fiq-R12_fiq, SP_fiq, LR_fiq PC,
CPSR, SPSR_fiq
R0–R7, R8_fiq–R14_fiq, PC, CPSR,
SPSR_fiq
b10010 IRQ R0–R7, R8-R12, SP_irq, LR_irq, PC, CPSR,
SPSR_irq
R0–R12, R13_irq, R14_irq, PC, CPSR,
SPSR_irq
b10011 Supervisor R0–R7, R8-R12, SP_svc, LR_svc, PC, CPSR,
SPSR_svc
R0–R12, R13_svc, R14_svc, PC, CPSR,
SPSR_svc
b10111 Abort R0–R7, R8-R12, SP_abt, LR_abt, PC, CPSR,
SPSR_abt
R0–R12, R13_abt, R14_abt, PC, CPSR,
SPSR_abt
b11011 Undefined R0–R7, R8-R12, SP_und, LR_und, PC, CPSR,
SPSR_und
R0–R12, R13_und, R14_und, PC, CPSR,
SPSR_und
b11111 System R0–R7, R8-R12, SP, LR, PC, CPSR R0–R14, PC, CPSR