bge
lyszt.net은 bge 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
bge는 blt와 짝을 이루며 그 조건을 반대로 뒤집습니다. 이 글자들은 branch if greater than or equal(크거나 같으면 분기)을 의미합니다. rs1이 rs2 이상일 때, 아래 명령어는 레이블이 지정된 위치로 점프합니다. 그렇지 않으면 실행은 다음 명령어로 계속됩니다.
bge rs1, rs2, label
임의의 두 값에 대해 blt와 bge 중 정확히 하나만 분기를 수행하므로, 이 둘이 모든 경우를 포괄합니다. 비교는 blt에서 설명하고, 분기 일반은 beq에서 설명합니다.
bge는 흔히 루프의 맨 위에서 종료 검사로 나타납니다. 아래 줄은 카운터 t1이 한계 t2에 도달하면 루프를 빠져나갑니다.
bge t1, t2, done
루프 본문이 뒤따르고, 그 끝의 무조건 점프가 맨 위로 돌아갑니다. 본문 앞에서 검사하면 0회 반복을 처리할 수 있는데, 조건이 이미 성립하는 본문은 결코 실행되지 않기 때문입니다.
or equal 부분은 경계에서의 동작을 결정합니다. bge는 두 값이 같을 때 분기하며, 루프에서의 off-by-one 오류는 대개 이 경계에서 비롯됩니다. 0부터 n까지 세는 루프는 카운터가 n에 도달하면 종료됩니다.
RISC-V 매뉴얼에 따르면, bge와 bgeu는 rs1이 rs2 이상일 때 분기를 수행하며, 각각 부호 있는 값과 부호 없는 값을 비교합니다. 분기 오프셋은 2바이트의 배수로 측정되는 12비트 값입니다.
blt와 마찬가지로 비교는 부호 있는 비교이므로 음수 값이 허용됩니다. bgeu는 부호 없는 형태로, 주소와 크기에 사용됩니다. 흔한 용도는 아래 줄에서처럼 값이 음수가 아님을 확인하는 것입니다.
bge t0, zero, ok
예시
bge t1, t2, done # leave the loop once i >= n
