ISA와 어셈블리
RISC-V 호출 규약에서 t0~t6은 '호출 원본 저장(caller-saved)' 레지스터이다. 어떤 함수가 t0에 넣은 값을 다른 함수를 호출한 뒤에도 사용하고 싶을 때 올바른 대응은?
- A아무것도 하지 않아도 호출된 함수가 t0를 반드시 원래대로 되돌려 준다
- Bt0는 다른 함수에서 고쳐 쓸 수 없으므로 그대로 사용할 수 있다
- C호출 전에 t0의 값을 스택 등에 대피시키고 호출한 뒤에 되돌린다
정답과 해설 보기
정답: C. 호출 전에 t0의 값을 스택 등에 대피시키고 호출한 뒤에 되돌린다
t 계열 레지스터는 호출된 함수가 저장하지 않고 자유롭게 사용해도 되도록 되어 있습니다. 그래서 호출한 뒤에도 값이 필요하다면 호출하는 쪽이 스스로 대피시켜 두어야 합니다. 저장 책임을 호출하는 쪽과 호출받는 쪽으로 레지스터별로 나눠 두면, 많은 함수는 저장 수고 없이 임시용 레지스터를 사용할 수 있고 전체 저장과 복원 횟수를 줄일 수 있습니다.