The following classes of constant are available in Thumb-2:
•Any constant that can be produced by shifting an 8-bit value left by any number of bits.
•Any replicated halfword constant of the form 0x00XY00XY
•Any replicated halfword constant of the form 0xXY00XY00
•Any replicated byte constant of the form 0xXYXYXYXY
See page 92 here: http://hermes.wings.cs.wisc.edu/files/Thumb-2SupplementRefer...
There is also MOVT which will set the top 16 bits of a register to any 16-bit value and not affect the bottom 16bits
And there is MOVW (MOV.W) which will set the bottom 16 bits to any value and zero the top 16 bits
MOVW + MOVT allows loading any 32-bit value in 2 instructions (8 bytes)