Skip to content

precolored register #17

@minkiminki

Description

@minkiminki

레지스터를 고려할 상황이 여럿 있다.

  1. callee save register
    고려하지 않고 register allocation을 한다. 그리고 callee save가 필요한 경우만 push, pop을 한다.

  2. caller save register
    call 인스트럭션을 실행할 때 caller save register들이 죽어있는 것으로 처리한다. 구체적으로는 call instruction 때에만 살아있는 임시 변수를 추가한다.

  3. 받은 parameter
    TODO 어렵다...
    처음에 parameter 변수로 옮기는 instruction을 추가하는 것이 가장 쉬워보인다.
    => opGetParam이라는 instruction 추가해서 완료 d923ad1

  4. 보낼 parameter
    call 전까지 살아 있는 임시변수(1)와, caller save register처럼 call 때만 차지하는 임시변수(2)를 추가한다. 또한 parameter에 넣는 변수는 (1)과 coalescing될 수 있다.
    이대로 구현은 아직 안 했음

  5. 함수 부른 뒤 return 값
    rax를 비워두고 있으므로 문제 없음(이슈 참조)

  6. 함수 끝낼 때 return 값
    rax를 비워두고 있으므로 문제 없음

  7. 특정 register를 사용해야 하는 연산
    항상 rax와 rdx를 비워두고 여기에 옮겨서 연산을 할 것

  8. 연산을 할 때 비어있어야 하는 레지스터
    항상 rax와 rdx를 비워두고 여기에 옮겨서 연산을 할 것이므로 문제 없음

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions