본문 바로가기

Computer Architecture

<RISC-V> Load upper immediate(LUI) Instruction에 대해서

RISC-V에서 Load upper immediate 명령은 destinate register와 20bit의 immediate value를 받을 수 있습니다. 

원래 RISC-V instruction은 명령의 type에 따라 12bit 에서 20 bit사이의 immediate value만 Arithmatic operation을 하거나 jump 할 수 있다. 하지만 Load upper immediate(LUI) 명령을 이용하면 32bit의 immediate value를 특정 register에 넣을 수 있다. 

ex)

lui x10, x12345

addi x10, x10, x678

 

lui연산은 20bit의 input immediate값을 받으며 그 값은 x10 regsiter에 31bit- 12bit에 저장된다. 

기본적으로 register에 저장될때 upper 31bit는 signed extension을 수행한다.

lui operation 다음에 add immediate(addi) instruction을 통해 register에 x12345678이라는 32bit값을 저장할 수 있다.

 

이떄 주의할 점이 있는데

addi operation은 기본적으로 signed extension한 immediate value를 register에 더한다는 것이다.

그래서 만약 12bit - 0 bit immediate를 더할때 MSB 가 1이면 sign extension을 한 후 원래 regsiter에 더하기 때문에 

결과값이 register의 13bit에 -1을 한 값이 나오게 된다.

ex)

lui x10, x12345 (x10 = xFFFFFFFF12345000)

addi x10, x10, xF67 (x10 = xFFFFFFFF12345000 + xFFFFFFFFFFFFFF67 = xFFFFFFFF12344F67)

 

따라서 addi 의 immediate value가 MSB가 1인 경우에는 lui operation시 1을 더한 값을 배치해야 값이 변하지 않고 원하는 값을 얻을 수 있다.