next up previous
Next: Replace JR and Up: MIT REVERSIBLE COMPUTING PROJECT Previous: Eliminate START and

Replace J with BRA

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.).



Michael Frank
Wed Jul 23 13:48:27 EDT 1997