bge
lyszt.net 更详细地介绍了 bge 和其他 RISC-V 指令。
编码格式
R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode
描述
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
循环体随后出现,循环末尾的无条件跳转返回顶部。提前测试可处理零次重复,因为条件已满足的主体永不执行。
“或等于”部分决定边界行为。bge 在两个值相等时分支,循环中的 off‑by‑one 错误通常可追溯到此边界。一个从 0 计数到 n 的循环在计数器达到 n 时退出。
根据 RISC‑V 手册,bge 与 bgeu 在 rs1 大于等于 rs2 时分支,分别比较有符号和无符号值。分支偏移是一个 12 位值,以 2 字节为单位测量。
与 blt 一样,比较是有符号的,因此允许负值。bgeu 是无符号形式,用于地址和大小。常见用法是检查一个值是否非负,例如下面的行。
bge t0, zero, ok
示例
bge t1, t2, done # leave the loop once i >= n
