Compaq ECQD2KCTE Laptop User Manual


 
Software Considerations A–3
branch-takens. If the infrequent case is rare (5%), put it far enough away that it never
comes into the I-cache. If the infrequent case is extremely rare (error message code),
put it on a page of rarely executed code and expect that page never to be paged in.
4. There are two functionally identical branch-format opcodes, BSR and BR, as shown in
Figure A–1.
Figure A–1: Branch-Format BSR and BR Opcodes
Compilers should use the first one for subroutine calls, and the second for GOTOs.
Some implementations may push a stack of predicted return addresses for BSR and not
push the stack for BR. Failure to compile the correct opcode will result in mispredicted
return addresses, and hence make subroutine returns slow.
5. The memory-format JSR instruction, shown in Figure A–2, has 16 unused bits. These
should be used by the compilers to communicate a hint about expected branch-target
behavior (see Section 4.3).
Figure A–2: Memory-Format JSR Instruction
If the JSR is used for a computed GOTO or a CASE statement, compile bits <15:14>
as 00, and bits <13:0> such that (updated PC+Instr<13:0>*4) <15:0> equals
(likely_target_addr) <15:0>. In other words, pick the low 14 bits so that a normal
PC+displacement*4 calculation will match the low 16 bits of the most likely target
longword address. (Implementations will likely prefetch from the matching cache
block.)
If the JSR is used for a computed subroutine call, compile bits <15:14> as 01, and bits
<13:0> as above. Some implementations will prefetch the call target using the
prediction and also push updated PC on a return-prediction stack.
If the JSR is used as a subroutine return, compile bits <15:14> as 10. Some
implementations will pop an address off a return-prediction stack.
If the JSR is used as a coroutine linkage, compile bits <15:14> as 11. Some
implementations will pop an address off a return-prediction stack and also push
updated PC on the return-prediction stack.
Implementors should give first priority to executing straight-line code with no branch-takens as
031 2120
Displacement
Branch Format
Branch Format
Displacement
BSR
Ra
Ra
BR
2625
031 1615
JSR Ra Rb Memory Format