rspseudogoto rsjr jumps to an address held in a register. The name is short for jump register. Where j jumps to a fixed label written in your code, jr jumps to wherever a register points — a destination worked out while the program runs. It keeps no return address; it simply goes.
It is a pseudo-instruction for jalr zero, rs, 0 — a register jump that throws away the return breadcrumb (see jalr). Think of j as following a sign you painted yourself, and jr as following an address handed to you on a slip of paper.
Its classic use is choosing among many destinations at once with a jump table — an array in memory holding the addresses of several code routines. To pick routine number i, you compute its slot in the table, load the address stored there into a register, and jr to it. This replaces a long ladder of comparisons (is it case 0? case 1? case 2?…) with a single lookup-and-jump, no matter how many cases there are. It is how a dense switch statement and the inner loop of an interpreter dispatch.
Notice the family connection: returning from a function is jumping to the address in ra, so ret is really jr ra under another name. The difference across the group is just where the address comes from and whether a return breadcrumb is saved.
jalr zero, rs, 0
A pseudo-instruction: the assembler turns it into the real instruction(s) above.