Thumb-2
Instrukční sada Thumb-2 obsahuje jak 32-bitové tak 16-bitové instrukce. Je postavena na původní instrukční sadě Thumb a rozšiřuje ji o řadu nových instrukcí.
Velikost nebo šířka instrukce říká, jaké místo instrukce zabírá v paměti. Instrukce se šířkou 32 bitů obsazuje jedno slovo (word) neboli 4 bajty, 16-bitová instrukce půlslovo (halfword), tedy dva bajty. K čemu je to dobré? Úspornější 16-bitové instrukce podstatně snižují požadavky na velikost paměti, která je pro program potřebná. Některé části kódu ale musí být provedeny rychleji, pro ty se použijí výkonnější instrukce 32-bitové.
Předchozí typy procesorů, například ARM7TDMI, mají dvě sady instrukcí, 32-bitové ARM instrukce a 16-bitové Thumb instrukce. Kód aplikací bývá často překládán do paměťově úsporné instrukční sady Thumb a například obsluha přerušení jako ARM instrukce. Procesor je ale nutné mezi stavy ARM a Thumb přepínat.
Narozdíl od předchozích typů, není ale u procesoru Cortex-M3 přepínání mezi 32-bitovými a 16-bitovými instrukcemi nutné. Procesor pracuje pouze ve stavu Thumb. Programy mohou být mixem 32-bitových a 16-bitových instrukcí. Řada instrukcí může být překladačem generována jako 32-ti nebo 16-bitová, záleží na použitých operandech. U některých instrukcí si programátor může vynutit použití 32-bitové instrukce (wide) použitím .W přípony u dané instrukce. Příponou .N (narrow) lze vynutit použití 16-bitové instrukce.
@ obě instrukce by překladač generoval jako 16-bitové @ přípona .W nutí překladač, aby generoval 32-bitové instrukce BCS.W label @ skok na label ADDS.W R0, R0, R1 @ R0 = R0 + R1