35.3.7.3. UNCONDITIONAL JUMPS AND CALLS ON HP-PA
+---------------------------+
| Len Value |
| 6 3A |
| 5 t |
| 5 w1 |
| 3 xx |
| 11 w2 |
| 1 n |
| 1 w |
+---------------------------+
Command xx
BL,n target,t 0 Branch and Link
disp <- lshift(sign_ext({w1,w2,w}),2)
IAQQ_Next <- IAQQ_Front + disp +8
GR[t] <- IAQQ_Back + 4
if (n) PSW[N] <- 1
GATE,n target,t 1 Gateway (to more priviledge level)
+---------------------------+
| Len Value |
| 6 3A |
| 5 t |
| 5 x |
| 3 xx |
| 11 0 |
| 1 n |
| 1 0 |
+---------------------------+
xx
BLR,n x,t 2 Branch and Link Register
IAQQ_Next <- IAQQ_Front + lshift(GR[x],3) + 8
GR[t] <- IAQQ_Back + 4
if (n) PSW[N] <- 1
Joined Commands:
opcode
MOVB,cond,n r1,r2,target 3A Move and branch
MOVIB,cond,n i,r,target 33 Move Immediate and branch
+---------------------------+
| Len Value |
| 6 3A |
| 5 b |
| 5 x |
| 3 xx |
| 11 0 |
| 1 n |
| 1 0 |
+---------------------------+
xx
BV,n x(b) 6 Branch Vectored
IAQQ_Next{0..29} <- (GR[b] + lshift(GR[x],3)) {0..29}
if (IAQQ_Front{30..31} < GR[b]{30..31})
IAQQ_Next{30..31} <- GR[b]{30..31}
else
IAQQ_Next{30..31} <- IAQQ_Front{30..31}
if (n) PSW[N] <- 1
+---------------------------+
| Len Value |
| 6 opcode |
| 5 b |
| 5 w1 |
| 3 s |
| 11 w2 |
| 1 n |
| 1 w |
+---------------------------+
opcode
BE,n wd(sr,b) 38 Branch External (to another space)
BLE,n wd(sr,b) 39 Branch and Link External
Note: Return from subroutine usually performed by
BV or BE
// ----------------------------------------------------------------------
Index Prev Next