Computer Science/Computer Architecture

[Computer Architecture] RISC-V overflow

LeeJaeJun 2024. 2. 27. 11:07
728x90
반응형

Overflow

한정된 컴퓨터 자원으로 표현하기에는 너무 큰(너무 작은) 결과값이 나왔을 때 발생

carry가 넘친 것을 의미하는 것이 아니다!

  • 양수와 음수를 더하는 과정에서는 오버플로우가 발생하지 않습니다.
  • 같은 부호를 가지는 수끼리의 뺄셈에서는 오버플로우가 발생하지 않습니다.(양수 빼기 양수, 음수 빼기 음수)

* 양수든 음수든 해당 자원의 크기만큼만 표현할 수 있기에 예를 들어, 양수 빼기 양수해서 엄청나게 작은 음수가 나와서 오버플로우가 발생하는 상황은 나오지 않음. 범위 안의 양수 - 양수 이기 때문입니다.

overflow table

  • A - B일 때, A가 0이면 오버플로우가 발생할 수 있습니다.
    • A - B = -B인데 만약 signed 4bit 연산이었다고하면 -8~7까지 표현가능하기 때문에 A = 0, B = -8 이었다고하면 A - B = 8이 되므로 signed 4bit 연산의 범위를 벗어나게 되어 오버플로우가 발생합니다.

 

Software checking of overflow

  • RISC-V 산술 연산에서는 overflow가 발생하여도 exception을 발생시키지 않습니다. 따라서 직접 검사를 해야합니다.
    • Exception: 어떤 process가 Instruction을 수행하다가 문제가 생기면 실행 중이던 프로그램을 멈추고, exception이라는 상태로 만들면서 운영체제 같은 곳으로 옮겨서 exception handling을 하는 것
  • Unsigned addition에서 overflow check
addu t0, t1, t2 # unsigned addition
bltu t0, t1, overflow # t0 = t1 + t2인데 t0 < t1이 나온다면 overflow가 발생한 것!
# overflow라고 지정한 곳에 옮겨서 핸들링할 수 있도록 합니다.

 

  • Signed addition with immediate에서 overflow check
addi t0, t1, +imm
blt t0, t1, overflow # t0 = t1 + 양수를 해서 t0 < t1일 수가 없음. 만약 그렇다면, overflow
  • Signed addition에서 overflow check
add t0, t1, t2 # t0 = t1 + t2
slti t3, t2, 0 # t3 = (t2 < 0) 즉, t2 < 0이면 t3 = 1 아니면 t3 = 0
slt t4, t0, t1 # t4 = t0 < t1 = (t1 + t2) < t1 즉, t1 + t2 < t1 이면 t4 = 1
bne t3, t4, overflow # t3 != t4면 overflow
# overflow if (t2 < 0) && (t1 + t2 >= t1) || (t2 >= 0) && (t1 + t2 < t1)
# 만약 t2 < 0이라면 t3 = t4 = 1로 t3 == t4임.
# 만약 t2 >= 0이면 t3 = t4 = 0으로 t3 == t4임.
# 따라서 t3 != t4이면 오버플로우가 발생한 것임
728x90
반응형