C言語で言うならば、レジスタというのはグローバル変数のようなものなの。
C言語でauto変数を使わずに、g0〜g31という名前のグローバル変数を、
うまくバッティングしないように人間が「管理」して使いまわす・・・考えただけでゾッとするでしょ。

レジスタが少なければ、レジスタとメモリあるいはスタック間でのやりとりの手間は増えるが、
しかし、スタックはグローバルじゃないし、メモリは複数の用途に使いまわすようなことは
(よほどメモリに窮する場合でなければ)しない。