sltiu
lyszt.net은 sltiu 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
인코딩 형식
설명
sltiu는 slti와 sltu를 결합한 것입니다. 레지스터와 상수를 비교하며 두 값을 모두 부호 없는 값으로 취급합니다. 이름은 set less than, immediate, unsigned의 각 부분을 쌓아 만든 것입니다. 아래 형식은 rs1이 상수 imm보다 작을 때 rd에 1을 쓰고, 두 값을 모두 음이 아닌 수로 읽으며, 그렇지 않으면 0을 씁니다.
sltiu rd, rs1, imm
sltu 페이지에서처럼 부호 없음은 최상위 비트가 수의 일반적인 자릿수로 계산된다는 뜻이므로, 범위는 0부터 약 40억까지입니다. sltiu는 음수가 될 수 없는 값에 대한 범위 검사, 예를 들어 인덱스가 배열의 크기보다 작은지 검사하는 일을 한 명령어로 처리합니다.
아래 줄은 값이 1보다 작은지 묻습니다.
sltiu rd, rs, 1
1보다 작은 부호 없는 값은 0뿐이므로, rs가 0일 때 결과는 1이고 그렇지 않으면 0입니다. 이것은 0과의 동등을 검사하며, seqz 축약형은 이것으로 만들어집니다. 두 값 사이의 동등도 이로부터 따릅니다. 두 값을 XOR하면 일치할 때만 0이 나오므로, 그 결과를 0과 검사합니다.
RISC-V 매뉴얼에 따르면 상수는 먼저 32비트로 부호 확장된 다음 부호 없는 수로 취급됩니다. 따라서 음수 상수는 매우 큰 부호 없는 값이 됩니다. 매뉴얼은 상수 1을 사용하는 sltiu를 0을 검사하는 방법으로 제시하며, 이것이 seqz 의사 명령어입니다.
slti와 마찬가지로, 12비트 범위를 넘는 상수는 li로 레지스터에 로드되고 sltu로 비교됩니다.
예시
li t0, -1 sltiu t1, t0, 5 # t1 = 0 (t0 read as unsigned is huge)
