5 * Revision 1.2 1996/04/18 16:11:58 mclareni
6 * Incorporate changes from J.Zoll for version 3.77
8 * Revision 1.1.1.1 1996/03/06 10:47:19 mclareni
12 #include "zebra/pilot.h"
13 SUBROUTINE MZPUSH (IXDIV,LORGP,INCNLP,INCNDP,CHOPT)
15 C- Change the size of a bank, user called
17 #include "zebra/zbcd.inc"
18 #include "zebra/zstate.inc"
19 #include "zebra/zunit.inc"
20 #include "zebra/zvfaut.inc"
21 #include "zebra/mqsys.inc"
22 #include "zebra/mzcl.inc"
23 #include "zebra/mzcn.inc"
24 #include "zebra/mzct.inc"
25 C-------------- End CDE --------------
26 DIMENSION IXDIV(9),LORGP(9),INCNLP(9),INCNDP(9)
28 #if (defined(CERNLIB_QTRHOLL))&&(!defined(CERNLIB_A6M))
30 DATA NAMESR / 4HMZPU, 4HSH /
32 #if (defined(CERNLIB_QTRHOLL))&&(defined(CERNLIB_A6M))
33 DATA NAMESR / 6HMZPUSH /
35 #if !defined(CERNLIB_QTRHOLL)
37 PARAMETER (NAMESR = 'MZPUSH ')
40 #include "zebra/q_jbit.inc"
41 #include "zebra/q_jbyt.inc"
42 #include "zebra/q_sbit1.inc"
43 #include "zebra/q_sbyt.inc"
45 #include "zebra/qtrace.inc"
47 IF (IXDIV(1).EQ.-7) GO TO 12
50 12 CALL MZCHNB (LORGP)
55 CALL UOPTC (CHOPT,'RI',IQUEST)
56 IFLAG = MIN (2, IQUEST(1)+2*IQUEST(2))
62 #if defined(CERNLIB_QDEVZE)
64 +WRITE (IQLOG,9809) LORG,INCNL,INCND,IFLAG
65 9809 FORMAT (1X/' DEVZE MZPUSH, Entry for LORG,INCNL,INCND,IFLAG= '
68 #if defined(CERNLIB_QDEBUG)
69 IF (IQVSTA.NE.0) CALL ZVAUTX
71 IF ((INCNL.EQ.0) .AND. (INCND.EQ.0)) GO TO 999
76 JQDIVI = MZFDIV (-7, LORG)
77 IF (JQDIVI.EQ.0) GO TO 91
79 C-- Set bank parameters
81 #if defined(CERNLIB_QDEBUG)
83 IF (IQFOUL.NE.0) GO TO 91
90 #if defined(CERNLIB_QDEVZE)
92 +WRITE (IQLOG,9831) JQDIVI,IQLS,IQID,IQNL,IQNS,IQND
93 9831 FORMAT (16X,'JQDIVI,IQLS,IQID,IQNL,IQNS,IQND=',I3,I7,1X,A4,4I8)
95 #if !defined(CERNLIB_QDEBUG)
100 NQNIO = JBYT (IQ(KQS+LORG),19,4)
105 IF (NS.EQ.NL) NQNS = NQNL
106 #if defined(CERNLIB_QDEBPRI)
108 + WRITE (IQLOG,9032) JQSTOR,JQDIVI,LORG,NQID,INCNL,INCND,CHOPT
109 9032 FORMAT (' MZPUSH- Store/Div',2I3,' L/ID/INCNL/INCND/OPT=',
112 IF (JBIT(IQ(KQS+LORG),IQDROP).NE.0) GO TO 92
114 C-- Check for bad parameters
116 IF (NQND+NQNL.GE.LQSTA(KQT+21)) GO TO 93
117 IF (NQND.LT.0) GO TO 93
118 IF (NQNL.GT.64000) GO TO 93
119 IF (NQNS.LT.0) GO TO 93
125 C-- Check giving up non-zero structural links
127 IF (NQNS.GE.NS) GO TO 36
131 IF (L.GE.LD) GO TO 36
133 35 IF (LNZ.EQ.0) GO TO 34
134 IF (LQ(KQS+LNZ+2).NE.L) GO TO 34
135 IF (JBIT(IQ(KQS+LNZ),IQDROP).EQ.0) GO TO 94
139 C-- Ready I/O characteristic
141 36 LN = LORG - NL - NQNIO - 1
142 CALL UCOPY (LQ(KQS+LN),NQIOCH,NQNIO+1)
143 IF (NQNIO.NE.0) NQIOSV(1)=0
144 NQIOCH(1) = MSBYT (NQNL+NQNIO+12,NQIOCH(1),1,16)
146 C-- Re-enter after garbage collection, if any
148 41 LE = LORG + ND + 9
150 C------ Check for short-cuts
152 INCTT = INCNL + INCND
153 INCMX = MAX (INCNL,INCND)
154 INCMI = MIN (INCNL,INCND)
156 IF (JQMODE.NE.0) GO TO 45
158 C-- Last bank in forward division
160 IF (LE.NE.LQEND(KQT+JQDIVI)) GO TO 51
161 IF (INCNL.GE.0) GO TO 42
162 IF (IFLAG.NE.1) GO TO 42
163 IF ((NQRESV.GE.INCTT).AND.(NQRESV.LT.INCND)) GO TO 42
166 CALL UCOPY (NQIOCH,LQ(KQS+LNN),NQNIO+1)
167 IQ(KQS+LORG-3) = NQNL
168 IQ(KQS+LORG-2) = NQNS
177 42 NQRESV = NQRESV - INCTT
178 IF (NQRESV.LT.0) GO TO 49
181 LQEND(KQT+JQDIVI) = LQEND(KQT+JQDIVI) + INCTT
182 #if defined(CERNLIB_QDEVZE)
183 IF (NQDEVZ.GE.7) WRITE (IQLOG,9848) NDELTA,LNEW
185 IF (NDELTA.EQ.0) THEN
186 IQ(KQS+LNEW-1) = NQND
187 IF (IFLAG.NE.0) GO TO 81
188 IF (INCMI.GE.0) GO TO 81
191 CALL UCOPY2 (LQ(KQS+LORG-NLC),LQ(KQS+LNEW-NLC),NLC+NDC+9)
192 IF (INCNL.GT.0) CALL VZERO (LQ(KQS+LNEW-NQNL),INCNL)
193 LQ(KQS+LN) = NQIOCH(1)
194 IQ(KQS+LNEW-3) = NQNL
195 IQ(KQS+LNEW-2) = NQNS
196 IQ(KQS+LNEW-1) = NQND
200 C-- First bank in reverse division
202 45 IF (LN.NE.LQSTA(KQT+JQDIVI)) GO TO 51
203 IF (INCND.GE.0) GO TO 47
204 IF (IFLAG.NE.1) GO TO 47
205 IF ((NQRESV.GE.INCTT).AND.(NQRESV.LT.INCNL)) GO TO 47
206 IQ(KQS+LORG-1) = NQND
215 47 NQRESV = NQRESV - INCTT
216 IF (NQRESV.LT.0) GO TO 49
219 LQSTA(KQT+JQDIVI) = LNN
223 IF (NDELTA.NE.0) CALL UCOPY2 (LQ(KQS+LORG-NLC)
224 +, LQ(KQS+LNEW-NLC), NLC+NDC+9)
226 IF (INCNL.GT.0) CALL VZERO (LQ(KQS+LNEW-NQNL),INCNL)
227 CALL UCOPY (NQIOCH,LQ(KQS+LNN),NQNIO+1)
229 IQ(KQS+LNEW-3) = NQNL
230 IQ(KQS+LNEW-2) = NQNS
231 IQ(KQS+LNEW-1) = NQND
232 #if defined(CERNLIB_QDEVZE)
233 IF (NQDEVZ.GE.7) WRITE (IQLOG,9848) NDELTA,LNEW
234 9848 FORMAT (' DEVZE MZPUSH, Edge bank with NDELTA,LNEW=',2I8)
237 IF (NDELTA.NE.0) GO TO 61
238 IF (IFLAG.NE.0) GO TO 81
239 IF (INCMI.GE.0) GO TO 81
242 C-- Garbage collection
246 LN = LORG - NL - NQNIO - 1
247 #if defined(CERNLIB_QDEVZE)
250 9849 FORMAT (1X/' DEVZE MZPUSH, Garbage collected for edge bank')
256 51 IF (INCMX.GT.0) GO TO 56
257 IF (INCNL.EQ.0) GO TO 52
262 CALL UCOPY (NQIOCH,LQ(KQS+LNN),NQNIO+1)
266 CALL MZPUDX (LN,-INCNL)
268 #if defined(CERNLIB_QDEVZE)
270 +WRITE (IQLOG,9851) INCNL
271 9851 FORMAT (' DEVZE MZPUSH, In-situ links with INCNL=',I8)
273 IF (INCND.EQ.0) GO TO 54
277 52 IQ(KQS+LORG-1) = NQND
281 #if defined(CERNLIB_QDEVZE)
283 +WRITE (IQLOG,9852) INCND
284 9852 FORMAT (' DEVZE MZPUSH, In-situ data with INCND=',I8)
289 IF (IFLAG.NE.0) GO TO 999
292 C------ Lift replacement bank
294 56 J = 64*(32*NQNIO + NQNIO + 1) + 1
295 NQIOCH(1) = MSBYT (J,NQIOCH(1),1,16)
298 CALL MZLIFT (-7,LNEW,0,63,NQID,-1)
302 CALL UCOPY (LQ(KQS+LORG-NLC),LQ(KQS+LNEW-NLC),NLC+4)
303 CALL UCOPY (IQ(KQS+LORG), IQ(KQS+LNEW), NDC+1)
304 IQ(KQS+LORG) = MSBIT1 (IQ(KQS+LORG),IQDROP)
305 #if defined(CERNLIB_QDEVZE)
307 +WRITE (IQLOG,9857) LORG,LNEW
308 9857 FORMAT (' DEVZE MZPUSH, Push by copy LORG -> LNEW=',2I8)
311 C------ Up-date immediate links only
313 61 IF (IFLAG.LT.2) GO TO 71
314 #if defined(CERNLIB_QDEVZE)
317 9861 FORMAT (' DEVZE MZPUSH, Update immediate links only')
320 C---- Update according to k-link in pushed bank
324 IF (LQ(KQS+K).NE.LORG) GO TO 95
327 C---- Update according to link 0
332 IF (L.EQ.LORG) GO TO 64
337 IF (L.NE.LORG) GO TO 63
340 C---- Update k- and up-link in vertically dependent banks
342 65 K = LNEW - NSC - 1
346 IF (K.GE.LNEW) GO TO 81
349 IF (LQ(KQS+L+2).NE.K-NDELTA) GO TO 66
352 C-- and its linear structure
355 68 LQ(KQS+L+1) = LNEW
357 IF (L.EQ.LF) GO TO 66
361 C------ Global update of links
366 #if defined(CERNLIB_QDEBPRI)
368 + WRITE (IQLOG,9071) JQSTOR,JQDIVI,LORG,NQID
369 9071 FORMAT (' MZPUSH- Store/Div',2I3,' Relocation pass for L/ID ='
372 #if defined(CERNLIB_QDEVZE)
375 9871 FORMAT (' DEVZE MZPUSH, Update by relocation pass')
382 IF (LQ(LMT).NE.JQDIVI) GO TO 74
388 LQ(LQTA-1) = LORG - NL - NQNIO - 1
389 LQ(LQTA) = LORG - NLC
390 LQ(LQTA+1) = LORG + NDC + 9
393 LQ(LQTA+4) = LORG + ND + 9
399 NQDPSH(KQT+JQDIVI) = NQDPSH(KQT+JQDIVI) + 1
401 C------ Finished, reset LORG, clear new data words
404 IF (INCND.GT.0) CALL VZERO (IQ(KQS+LNEW+ND+1),INCND)
405 #include "zebra/qtrace99.inc"
408 C---- Error conditions
417 IQUEST(19) = L - LORG
418 IQUEST(20) = LQ(KQS+L)
419 93 NQCASE = NQCASE + 1
420 92 NQCASE = NQCASE + 1
429 91 NQCASE = NQCASE + 1
432 #include "zebra/qtofatal.inc"
434 * ==================================================
435 #include "zebra/qcardl.inc"