Dev:Coprocessors

This page describes various instructions associated to coprocessors on the ARM chip.

CP15: System Control Coprocessor
Most operations are done using opcode "0". To read data from the coprocessor to the register rD, use the assembly mrc p15, 0, , , , To write data into coprocessor from rS, so mcr p15, 0, , , ,

Notable usage
In the iPhoneOS user-land, the most prominent use of CP15 is to provide thread-local storage via the "User read-only thread and process ID" register. For instance, in libSystem.dylib, pthread_self is implemented as

Register allocation for Opcode 0
c15 is also involved in other operations using opcode 1 and above which are not reproduced here.

CP14: Debug Register
Not to be included here.

CP10 & CP11: Vector floating point coprocessor
Both CP10 and CP11 are used for the VFP11 coprocessor. CP10 is for single-precision and CP11 for double-precision.