Arm and x86 have a similar number of instructions. The tradeoff is that with x86 you end up with more compact code because the instructions are variable length; but on arm the actual decoding is easier so you have more space for i$ (or anything else you want).
The tricky bit here is actually the SIMD instructions since they can be very long and compiler will often go absolutely bonkers on fairly short code.