]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/mqg/mzrelb.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / mqg / mzrelb.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.3 1996/04/24 17:26:32 mclareni
6* Extend the include file cleanup to dzebra, rz and tq, and also add
7* dependencies in some cases.
8*
9* Revision 1.2 1996/04/18 16:12:37 mclareni
10* Incorporate changes from J.Zoll for version 3.77
11*
12* Revision 1.1.1.1 1996/03/06 10:47:20 mclareni
13* Zebra
14*
15*
16#include "zebra/pilot.h"
17 SUBROUTINE MZRELB
18
19C- Relocator for links in banks
20
21#include "zebra/zstate.inc"
22#include "zebra/zunit.inc"
23#include "zebra/mqsys.inc"
24#include "zebra/mzcn.inc"
25#include "zebra/mzct.inc"
26C-------------- End CDE --------------
27#if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
28 DIMENSION NAMESR(2)
29 DATA NAMESR / 4HMZRE, 4HLB /
30#endif
31#if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
32 DATA NAMESR / 6HMZRELB /
33#endif
34#if !defined(CERNLIB_QTRHOLL)
35 CHARACTER NAMESR*8
36 PARAMETER (NAMESR = 'MZRELB ')
37#endif
38
39#if !defined(CERNLIB_QDEBUG)
40#include "zebra/q_jbyt.inc"
41#endif
42
43
44#include "zebra/qtrace.inc"
45
46 LFIXLO = LQ(LQTA-1)
47 LFIXRE = LQ(LQTA)
48 LFIXHI = LQ(LQTE)
49 JHIGO = (LQTE-LQTA) / 4
50 NENTR = JHIGO - 1
51
52 IF (NENTR.EQ.0) THEN
53 LADTB1 = LQ(LQTA+1)
54 NRLTB2 = LQ(LQTA+2)
55 IFLTB3 = LQ(LQTA+3)
56 ENDIF
57
58 LMRNX = LQMTA
59 12 LMR = LMRNX
60 IF (LMR.GE.LQMTE) GO TO 999
61 LMRNX = LMRNX + 8
62
63#if defined(CERNLIB_QDEVZE)
64 IF (NQDEVZ.GE.11)
65 +WRITE (IQLOG,9813) (LQ(J+LMR-1),J=1,8)
66 9813 FORMAT (1X/' DEVZE MZRELB. DIV, ACT, NSH, LF, LL, LTA, LTB'
67 F,', NFREE'/14X,2I5,6I7)
68#endif
69
70 IACT = LQ(LMR+1)
71 IF (IACT.LE.0) GO TO 12
72 IF (IACT.EQ.4) GO TO 12
73 LSTOP = LQ(LMR+4)
74 IF (IACT.EQ.3) GO TO 14
75 LN = LQ(LMR+3)
76 LDEAD = LSTOP
77 GO TO 19
78
79 14 LSEC = LQRTA + LQ(LMR+5) - 4
80
81C------ Next bank, check if dead group
82
83 16 LSEC = LSEC + 4
84 LNX = LQ(LSEC)
85 LDEAD = LQ(LSEC+1)
86
87 17 LN = LNX
88 IF (LN.GE.LSTOP) GO TO 12
89 IF (LN.EQ.LDEAD) GO TO 16
90
91C-- Next bank, alive
92
93 19 CONTINUE
94
95#if defined(CERNLIB_QDEBUG)
96 CALL MZCHLN (-7,LN)
97 IF (IQFOUL.NE.0) GO TO 91
98 LNX = IQNX
99 IF (IQND.LT.0) GO TO 17
100 LS = IQLS
101 LX = LS + 3
102 L2 = LS - IQNS
103 L1 = LS - IQNL
104#endif
105#if defined(CERNLIB_QDEVZE)
106 IF (NQDEVZ.GE.11) WRITE (IQLOG,9819) LN, IQID,IQNL,IQNS,IQND
107 9819 FORMAT (1X/' DEVZE MZRELB. Do bank at LN =',I7
108 F,' ID,NL,NS,ND= ',A4,3I7)
109#endif
110#if !defined(CERNLIB_QDEBUG)
111 NST = JBYT (LQ(KQS+LN),1,16) - 11
112 IF (NST.LT.0) THEN
113 LNX = LN + NST + 11
114 GO TO 17
115 ELSE
116 LS = LN + NST
117 LX = LS + 3
118 L2 = LS - IQ(KQS+LS-2)
119 L1 = LS - IQ(KQS+LS-3)
120 LNX = LS + IQ(KQS+LS-1) + 9
121 ENDIF
122#endif
123 IF (NENTR) 66, 46, 26
124
125C-------------- 2 OR MORE RELOCATION INTERVALS -------------
126
127C---- Next link
128
129 24 LQ(KQS+L1)= 0
130
131 25 L1 = L1 + 1
132 IF (L1.EQ.LX) GO TO 17
133 26 LFIRST= LQ(KQS+L1)
134 27 LINK = LQ(KQS+L1)
135 IF (LINK.EQ.0) GO TO 25
136
137#if defined(CERNLIB_QDEVZE)
138 IF (NQDEVZ.GE.11) WRITE (IQLOG,9827) LINK,L1
139 9827 FORMAT (16X,'Link =',I7,' from L1 =',I7)
140#endif
141 IF (IQFLIO.EQ.0) THEN
142 IF (LINK.LT.LFIXLO) GO TO 25
143 IF (LINK.GE.LFIXHI) GO TO 25
144 IF (LINK.LT.LFIXRE) GO TO 24
145 ELSE
146 IF (LINK.LT.LFIXRE) GO TO 24
147 IF (LINK.GE.LFIXHI) GO TO 24
148 ENDIF
149
150C-- Binary search in relocator table
151
152 JLOW = 0
153 JHI = JHIGO
154
155 29 JEX = (JHI+JLOW) / 2
156 IF (JEX.EQ.JLOW) GO TO 31
157 IF (LINK.GE.LQ(LQTA+4*JEX)) GO TO 30
158 JHI = JEX
159 GO TO 29
160
161 30 JLOW = JEX
162 GO TO 29
163
164C-- Relocate
165
166 31 JTB = LQTA + 4*JLOW
167
168#if defined(CERNLIB_QDEVZE)
169 IF (NQDEVZ.GE.11)
170 +WRITE (IQLOG,9831) JLOW, (LQ(JTB+J-1),J=1,4)
171 9831 FORMAT (50X,'Entry',I5,',',4I7)
172#endif
173 IF (LINK.GE.LQ(JTB+1)) GO TO 33
174 LQ(KQS+L1) = LINK + LQ(JTB+2)
175 GO TO 25
176
177C---- Link into dead area
178
179 33 IF (LQ(JTB+3)) 25, 24, 34
180
181C-- Bridge structural link
182
183 34 IF (L1.LT.L2) GO TO 24
184 IF (LS+1-L1) 36, 24, 35
185 35 CONTINUE
186
187#if defined(CERNLIB_QDEBUG)
188 CALL MZCHLS (-7,LINK)
189 IF (IQFOUL.NE.0) GO TO 92
190#endif
191 LINK = LQ(KQS+LINK)
192 LQ(KQS+L1) = LINK
193 IF (LINK.NE.LFIRST) GO TO 27
194 GO TO 24
195
196C-- Reverse bridging of s-link
197
198 36 LINK = LQ(KQS+LINK+2)
199 LQ(KQS+L1) = LINK
200 GO TO 27
201
202C-------------- 1 RELOCATION INTERVAL ONLY -------------
203
204C---- Next link
205
206 44 LQ(KQS+L1)= 0
207
208 45 L1 = L1 + 1
209 IF (L1.EQ.LX) GO TO 17
210 46 LFIRST= LQ(KQS+L1)
211 47 LINK = LQ(KQS+L1)
212 IF (LINK.EQ.0) GO TO 45
213
214#if defined(CERNLIB_QDEVZE)
215 IF (NQDEVZ.GE.11) WRITE (IQLOG,9827) LINK,L1
216#endif
217 IF (IQFLIO.EQ.0) THEN
218 IF (LINK.LT.LFIXLO) GO TO 45
219 IF (LINK.GE.LFIXHI) GO TO 45
220 IF (LINK.LT.LFIXRE) GO TO 44
221 IF (LINK.GE.LADTB1) GO TO 53
222 ELSE
223 IF (LINK.LT.LFIXRE) GO TO 44
224 IF (LINK.GE.LADTB1) GO TO 44
225 ENDIF
226
227C-- Relocate
228
229 LQ(KQS+L1) = LINK + NRLTB2
230 GO TO 45
231
232C---- Link into dead area
233
234 53 IF (IFLTB3) 45, 44, 54
235
236C-- Bridge structural link
237
238 54 IF (L1.LT.L2) GO TO 44
239 IF (LS+1-L1) 56, 44, 55
240 55 CONTINUE
241
242#if defined(CERNLIB_QDEBUG)
243 CALL MZCHLS (-7,LINK)
244 IF (IQFOUL.NE.0) GO TO 92
245#endif
246 LINK = LQ(KQS+LINK)
247 LQ(KQS+L1) = LINK
248 IF (LINK.NE.LFIRST) GO TO 47
249 GO TO 44
250
251C-- Reverse bridging of s-link
252
253 56 LINK = LQ(KQS+LINK+2)
254 LQ(KQS+L1) = LINK
255 GO TO 47
256
257C-------------- NO RELOCATION INTERVAL -------------
258
259C---- Next link
260
261 64 LQ(KQS+L1)= 0
262
263 65 L1 = L1 + 1
264 IF (L1.EQ.LX) GO TO 17
265 66 LINK = LQ(KQS+L1)
266 IF (LINK.EQ.0) GO TO 65
267
268#if defined(CERNLIB_QDEVZE)
269 IF (NQDEVZ.GE.11) WRITE (IQLOG,9827) LINK,L1
270#endif
271 IF (LINK.LT.LFIXLO) GO TO 65
272 IF (LINK.GE.LFIXHI) GO TO 65
273 GO TO 64
274
275C------ Error conditions
276#if defined(CERNLIB_QDEBUG)
277 92 NQCASE = 1
278 NQFATA = 2
279 LN = LS
280 IQUEST(12) = L1
281 IQUEST(13) = LINK
282 91 NQCASE = NQCASE + 1
283 NQFATA = NQFATA + 1
284 IQUEST(11) = LN
285 IF (IQFLIO.NE.0) GO TO 98
286#include "zebra/qtofatal.inc"
287
288 98 IQUEST(9) = NQCASE
289 IQUEST(10)= NQFATA
290 NQCASE = 0
291 NQFATA = 0
292 IQFLIO = -7
293#endif
294#include "zebra/qtrace99.inc"
295 RETURN
296 END
297* ==================================================
298#include "zebra/qcardl.inc"