-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
레지스터를 고려할 상황이 여럿 있다.
-
callee save register
고려하지 않고 register allocation을 한다. 그리고 callee save가 필요한 경우만 push, pop을 한다. -
caller save register
call 인스트럭션을 실행할 때 caller save register들이 죽어있는 것으로 처리한다. 구체적으로는 call instruction 때에만 살아있는 임시 변수를 추가한다. -
받은 parameter
TODO 어렵다...
처음에 parameter 변수로 옮기는 instruction을 추가하는 것이 가장 쉬워보인다.
=>opGetParam이라는 instruction 추가해서 완료 d923ad1 -
보낼 parameter
call 전까지 살아 있는 임시변수(1)와, caller save register처럼 call 때만 차지하는 임시변수(2)를 추가한다. 또한 parameter에 넣는 변수는 (1)과 coalescing될 수 있다.
이대로 구현은 아직 안 했음 -
함수 부른 뒤 return 값
rax를 비워두고 있으므로 문제 없음(이슈 참조) -
함수 끝낼 때 return 값
rax를 비워두고 있으므로 문제 없음 -
특정 register를 사용해야 하는 연산
항상 rax와 rdx를 비워두고 여기에 옮겨서 연산을 할 것 -
연산을 할 때 비어있어야 하는 레지스터
항상 rax와 rdx를 비워두고 여기에 옮겨서 연산을 할 것이므로 문제 없음
Reactions are currently unavailable