We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
레지스터를 고려할 상황이 여럿 있다.
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
opGetParam
보낼 parameter call 전까지 살아 있는 임시변수(1)와, caller save register처럼 call 때만 차지하는 임시변수(2)를 추가한다. 또한 parameter에 넣는 변수는 (1)과 coalescing될 수 있다. 이대로 구현은 아직 안 했음
함수 부른 뒤 return 값 rax를 비워두고 있으므로 문제 없음(이슈 참조)
함수 끝낼 때 return 값 rax를 비워두고 있으므로 문제 없음
특정 register를 사용해야 하는 연산 항상 rax와 rdx를 비워두고 여기에 옮겨서 연산을 할 것
연산을 할 때 비어있어야 하는 레지스터 항상 rax와 rdx를 비워두고 여기에 옮겨서 연산을 할 것이므로 문제 없음
The text was updated successfully, but these errors were encountered:
지금은 4에서 말한 임시변수를 정해놓고 그것만 쓰는 식이었는데 coalescing을 위해서는 매번 새로 만드는 것이 나을 듯하다(죽어있는 것을 표현하기 위한 register는 제외). => 완료
Sorry, something went wrong.
arguments 채우지 않은 부분 register도 다 죽여야 하는데 지금 그렇게 처리를 안 했다. 수정할 것 => 완료
전부 완료
No branches or pull requests
레지스터를 고려할 상황이 여럿 있다.
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를 비워두고 여기에 옮겨서 연산을 할 것이므로 문제 없음
The text was updated successfully, but these errors were encountered: