I Use 0x3 because that's the smallest shift you can do in an ORR.
So it goes through 2 bits at a time. If nothing there, it skips it. Otherwise, you must count it as an op.
I don't see how it would miss anything. It goes even finer-grained than 0xF.
Anyway, all the MOVI2Rs I get now are 0x8800000 based.