J (jump) could actually be left in, but to work with the branch register mechanism it should be defined to work as follows:
1. Compute the destination address DEST as in PISA spec. DEST = PC_{31..26} || target 2. offset = DEST-PC 2. BR += offset
This has the same effect as the original J of going to address DEST, but it uses the mechanism of an unconditional branch, one in which the offset is specified in kind of a weird way by a combination of the 26-bit target and the instruction's address.
Aesthetically I would prefer to just use the 26-bit field directly as an offset, and call the instruction BRA; it would work as follows.
1. BR += (target_25)^6 || target
It's simpler to implement.
Whichever one we keep, J or BRA (or both), the instruction can also be used to make subroutine calls as we will describe. In either case, J_r can be eliminated; the same instruction can be used to either unconditionally begin or unconditionally terminate a branch. If not paired properly it will have the same weird behavior as other branches (hopping off into space, etc.).