
ARM Instruction Set - MRC, MCR
ARM7TDMI Data Sheet
ARM DDI 0029E
4-57
O
4.16 Coprocessor Register Transfers (MRC, MCR)
The instruction is only executed if the condition is true. The various conditions are
defined in
·
Table 4-2: Condition code summary
on page 4-5. The instruction encoding
is shown in
·
Figure 4-27: Coprocessor register transfer instructions
.
This class of instruction is used to communicate information directly between
ARM7TDMI and a coprocessor. An example of a coprocessor to ARM7TDMI register
transfer (MRC) instruction would be a FIX of a floating point value held in a
coprocessor, where the floating point number is converted into a 32 bit integer within
the coprocessor, and the result is then transferred to ARM7TDMI register. A FLOAT of
a 32 bit value in ARM7TDMI register into a floating point value within the coprocessor
illustrates the use of ARM7TDMI register to coprocessor transfer (MCR).
An important use of this instruction is to communicate control information directly from
the coprocessor into the ARM7TDMI CPSR flags. As an example, the result of a
comparison of two floating point values within a coprocessor can be moved to the
CPSR to control the subsequent flow of execution.
Figure 4-27: Coprocessor register transfer instructions
4.16.1 The coprocessor fields
The CP# field is used, as for all coprocessor instructions, to specify which coprocessor
is being called upon.
The CP Opc, CRn, CP and CRm fields are used only by the coprocessor, and the
interpretation presented here is derived from convention only. Other interpretations
are allowed where the coprocessor functionality is incompatible with this one. The
conventional interpretation is that the CP Opc and CP fields specify the operation the
coprocessor is required to perform, CRn is the coprocessor register which is the
21
Cond
0
11
12
15
16
19
20
24
27
28
31
23
CP#
7
8
1110
CRn
CP
CRm
5
4
3
1
L
CP Opc
Rd
Coprocessor number
ARM source/destination register
Coprocessor source/destination register
Coprocessor information
Coprocessor operand register
Coprocessor operation mode
Condition field
Load/Store bit
0 = Store to Co-Processor
1 = Load from Co-Processor