>>916
関数を呼び出す時にスタックにレジスタの値を退避するというのは、スタックで現在処理中の値やプログラムの実行位置を管理してるからで、呼び出した関数から戻ってくるまでそれらの値をスタックに置いておくということでしかない
呼び出した関数から戻ってきた時にこれらの値をレジスタに戻すことで、同じ位置から処理を再開するというのがこの機能の目的であって、キャッシュとは何も関係がない

また、スタック領域に置かれた変数が全てレジスタに書きこまれているわけではない(それどころか、レジスタは全部合わせても大した数がなく、データ置き場としては使えない)し、スタック領域に置かれた変数が全てキャッシュに乗るといった事実もない(当然ながら、あまり使われなければキャッシュには置かない)