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