Earlier quoted context omitted.
Note that the actual number of registers is considerably different than the number of registers you can access through instruction set. They are used via register renaming and optimizations of complex instructions.
Yes. As other commentors have said, if you are doing out-of-order execution well, the CPU will have many more 'hidden' registers and do register renaming to use them. But this has an interesting interaction with compilers. Say you have a simple function that is going to add 1 to a bunch of variables. In an ARM-like assembly code, this could be written as: LDR r1, [r0, #0] ADD r1, r1, #1 STR r1, [r0, #0] LDR r1, [r0,…
And no one does OoOe without register renaming.