procedure 호출 후 값이 변하지 않는 것(보존)이 보장되는 레지스터와 보장되지 않은 레지스터
preserved | Not preserved |
---|---|
Saved Register: x8-x9, | x18-x27 Temporary Register x5-x7, x28-x31 |
Stack Pointer(sp): x2 | Argument/Result Register: x10-x17 |
Frame Pointer(fp): x8 | |
Return Address(ra): x1 | |
sp위 stack item | sp 아래 stack item |
RISC-V의 레지스터는 32개로 고정이다. 참고로 현대 CPU의 레지스터의 갯수는 대부분 32개이다.
🖇️cf. 명령어에서 레지스터를 표현하는 bit수는 5bit면 충분하다는 이야기도 된다.
RISC-V 구조에서 레지스터 크기는 64bit다.
Name | Usage | 호출 시 값 보존 보장 유무 |
---|---|---|
x0 | 상수 0을 값으로 갖는다. | n.a.(not applicable) |
x1(ra) | Return address(link register) | yes |
x2(sp) | Stack pointer | yes |
x3(gp) | Global pointer | yes |
x4(tp) | Thread pointer | yes |
x5-x7 | Termporary Register | no |
x8-x9 | Saved (값의 보존을 보장해주는 레지스터) x8은 fp로 쓰이기도 한다. (단, procedure내에서 sp가 변하는 경우) | yes |
x10-x17 | Arguments/Results | no |
x18-x27 | Saved | yes |
x28-x31 | Temporary Register | no |