A32 Instruction Set

A32 instructions, known as ARM instructions in pre-ARMv8 architectures, are 32 bits wide, and are aligned on 4-byte boundaries. A32 instructions are supported by both A-profile and R-profile architectures. 

A32 was traditionally used in applications requiring the highest performance, or for handling hardware exceptions such as interrupts and processor start-up. Much of its functionality was subsumed into T32 with the introduction of Thumb-2 technology. 

Most A32 instructions only execute when previous instructions have set a particular condition code. This means that instructions only have their normal effect on the programmers’ model operation, memory and coprocessors if the N, Z, C and V flags satisfy a condition specified in the instruction. If the flags do not satisfy this condition, the instruction acts as a NOP. This means that execution advances to the next instruction as normal, including any relevant checks for exceptions being taken, but has no other effect. This conditional execution of instructions allows small sections of if- and while-statements to be encoded without the use of branch instructions.

The condition codes are:

 Condition Code Meaning 
 N  Negative condition code. Set to 1 if  result is negative.
 Z  Zero condition code. Set to 1 if the result of the instruction is 0.
 C  Carry condition code. Set to 1 if the instruction results in a carry condition.
 V  Overflow condition code. Set to 1 if the instruction results in an overflow condition.

T32 Instruction Set

The T32 instruction set, known as Thumb in pre-ARMv8 architectures, is a mixed 32- and 16-bit length instruction set that offers the designer excellent code density for minimal system memory size and cost.

T32 provides enhanced levels of performance, energy efficiency, and code density for a wide range of embedded applications. Designers can use both T32 and A32 instructions sets and therefore have the flexibility to emphasize performance or code size on a subroutine level as their applications require. T32 is supported across all architecture profiles, and is the only instruction set supported by the M-profile architecture.