bgeu
lyszt.net은 bgeu 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
bgeu는 bge의 부호 없는 버전이며 bltu의 반대입니다. 이름은 branch if greater than or equal, unsigned입니다. rs1이 rs2 이상일 때 레이블로 점프하며, 둘 다 음수가 아닌 수로 읽습니다. 비교에 대해서는 bge를, 부호 없음이 무엇을 바꾸는지에 대해서는 bltu를 참조하세요.
bgeu로 이 패밀리에는 여섯 개의 분기가 있습니다. 같음, 작음, 크거나 같음이라는 세 가지 질문이 있고, 마지막 두 개는 부호 있는 형식과 부호 없는 형식으로 존재합니다. beq와 bne는 동등성을 검사하고, blt와 bge는 부호 있는 값을 비교하며, bltu와 bgeu는 부호 없는 값을 비교합니다. 이 여섯 개와, 크다 및 작거나 같음 방향을 위해 피연산자를 바꾼 것을 합치면 프로그램에 필요한 모든 비교를 처리할 수 있습니다.
bgeu는 음수가 될 수 없는 양에 대한 한계에 적합합니다. 예를 들어 위치가 끝에 도달했을 때 루프를 빠져나가기, 배열 크기에 도달한 인덱스를 거부하기, 길이가 용량에 도달했을 때 핸들러로 분기하기 등이 있습니다. 메모리 주소를 비교할 때는 bltu와 bgeu를 사용합니다. 주소는 부호가 없으며, 부호 있는 버전은 거기서 잘못된 결과를 내기 때문입니다.
RISC-V 매뉴얼에 따르면 부호 있는 배열 경계는 단일 부호 없는 분기로 검사할 수 있습니다. 음수 인덱스는 어떤 음수가 아닌 경계보다도 크게 비교되기 때문입니다. bgeu와 bltu는 그 검사의 두 가지 형식입니다.
아래 줄은 결합된 경계 검사를 한 명령어로 수행합니다.
bgeu i, n, error
이것은 너무 크거나 음수인 인덱스를 잡아냅니다. 음수 인덱스는 거대한 부호 없는 값으로 읽혀 검사에 실패하기 때문입니다.
예시
li t0, -1 li t1, 1 bgeu t0, t1, done # t0 read as unsigned is huge, so jump to 'done'
