2.2 ARM, Thumb,
and ThumbEE instruction sets

The ARM instruction set is a set of 32-bit instructions providing
a comprehensive range of operations.

ARMv4T and later define a 16-bit instruction set called Thumb.
Most of the functionality of the 32-bit ARM instruction set is available,
but some operations require more instructions. The Thumb instruction
set provides better code density, at the expense of performance.

ARMv6T2 introduces Thumb-2 technology. This is a major enhancement
to the Thumb instruction set by providing 32-bit Thumb instructions.
The 32-bit and 16-bit Thumb instructions together provide almost
exactly the same functionality as the ARM instruction set. This
version of the Thumb instruction set achieves the high performance
of ARM code along with the benefits of better code density.

ARMv7 includes Thumb-2 technology. ARMv7-M only supports
the Thumb instruction set. Therefore, interworking instructions in ARMv7-M must not attempt
to change to ARM state. ARMv7-A and ARMv7-R support both ARM and Thumb instruction sets.

ARMv7 defines the Thumb Execution Environment
(ThumbEE). The ThumbEE instruction set is based on Thumb, with some changes and additions to
make it a better target for dynamically generated code, that is, code compiled on the device
either shortly before or during execution.