저는 현재 MIPS 아키텍처를 목표로 숙제로 a toy compiler을 작성하고 있습니다. 호출자-저장됩니다 s0
s7
, 그리고 호출자가 저장되어 t9
-t0
:MIPS 컴파일러의 레지스터 - 사용할 레지스터?
18 개보다 높은 수준의 언어로 번역 할 때 일반적으로 사용할 수있는 레지스터가 있습니다.
이 18 개의 레지스터를 사용할 수있는 경우, 함수의 변환을 수행 할 때 어느 레지스터를 선호해야합니까?
- 호출 수신자 저장 레지스터에 저장가 각각 처음에 스택 기능의 끝에서 복원해야
각 세트는 장단점이있다.
- 호출자 저장 레지스터는 서브 루틴 호출 전후에 스택에 저장하고 스택에서 복원해야합니다.
이러한 레지스터를 사용하여 정적 전략을 채택한 경우 - 호출자가 저장 한 레지스터보다 호출 수신자 저장 레지스터를 선호하는 것과 같은 전략이 무엇이든간에 - 나는 아마도 거기에서 가장 좋은 성능을 얻지 못할 것입니다. 불필요한 레지스터로드/저장이됩니다.
그럼이 두 세트의 레지스터를 사용하는 좋은 습관이 있습니까?