rs1, rs2, labelif (rs1 >= rs2) goto labelbgeu is the unsigned version of bge, and the exact opposite of bltu. The name is branch if greater than or equal, unsigned: it jumps to the label when rs1 is at least rs2, with both read as never-negative numbers. (See bge for the comparison and bltu for what unsigned changes.)
This completes the family of six branches, which is worth seeing as a whole. There are three questions — equal, less-than, and greater-or-equal — and the last two each come in a signed and an unsigned form, giving: beq/bne for equality, blt/bge for signed ordering, and bltu/bgeu for unsigned ordering. Every comparison a program needs is built from these six (plus operand-swapping for the greater-than and less-or-equal directions).
bgeu speaks naturally about limits on quantities that cannot be negative: leave a loop when a position reaches the end, reject an index that has hit the array size, branch to an overflow handler when a length reaches capacity. Walking through memory by comparing addresses is a bltu/bgeu job, since addresses are unsigned — using the signed versions there is the usual hidden bug.
Its mirror of the combined bounds check works too: bgeu i, n, error catches an index that is either too large or negative in a single instruction, because a negative index reads as a huge unsigned value and trips the test.