Electronic – ARM Instruction set

armcortex-m0microcontroller

I am trying to enter into the world of ARM and one thing I come across very often is that ARM processors support ARM and Thumb instruction set.
So it means compiler will use Thumb Instructions which are 16-bit to improve code density and it will use ARM instructions only when absolutely necessary. AM I right?
But now there are newer processors which support Thumb 2 which has 16 bit as well as 32 bit instructions.
But then what makes these newer processors with Thumb 2 superior to the ones which use ARM and THUMB.
I mean basically both the families will have 16 bit as well as 32 bit instructions at their disposal or is there some benefit of having Thumb 2 as compared to having Arm and Thumb instruction sets.
I bought Atmel SAMD21 Kit to develop our new products but before that I am just trying to understand some architecture concepts before I actually start with the hardware.

Best Answer

An ARM processor can not execute arbitrary sequences of interleaved ARM and Thumb instructions. It has to be switched from one instruction set to another, e.g. through a branch instruction. So most of the time you tell the compiler to use either ARM or Thumb instructions throughout your project. The best the compiler can probably do is to decide on a function-by-function basis which instruction set fits best. The Thumb2 instruction set is supposed to combine the advantages of ARM and Thumb without the drawbacks.

Edit:

The answer to the question @Kynit linked to basically also states the above.