PROGRAM GSBYT C C ===== TEST GBYTES/SBYTES ======= C C SET MACHINE WORD SIZE (IWZ) AND PACKED BUFFER SIZE (IA). C SMALLER IA RESULTS IN FASTER EXECUTION, BUT IA>10 IS BEST. PARAMETER (IWZ=64,IWZL=IWZ-1,IA=20,IC=IA*IWZ,IB=IA,ID=IC) C CHOOSE APPROPRIATE SPECIFICATION FOR BUFFERS. INTEGER*4 NA(IA),NB(IB),NC(IC),ND(ID) C DIMENSION NA(IA),NB(IB),NC(IC),ND(ID) C C INITIALIZE BUFFERS FOR TEST C C INSERT CALL TO INITAL TO TEST GENERIC FORTRAN VERSION C CALL INITAL PRINT 1007 1007 FORMAT(' BEGIN GBYTE/SBYTE TEST ') IMSK=0 DO 10 I=1,IWZ-1,2 10 IMSK=IMSK+2**(I-1) DO 12 I=1,IA NA(I)=IMSK 12 NB(I)=0 DO 14 I=1,IC NC(I)=0 14 ND(I)=0 IBRV=-2 CALL GBYTES(IBRV,IBSW,0,IWZ,0,1) IF(IBRV.EQ.IBSW) GO TO 17 PRINT 1008,IBRV,IBSW 1008 FORMAT(' FULL WORD GBYTE FAILED ',2Z9) IBRV=2**(IWZL-1) CALL GBYTES(IBRV,IBSW,0,IWZ,0,1) IF(IBRV.EQ.IBSW) GO TO 17 IF(IBSW.NE.64) GO TO 17 PRINT 1009 1009 FORMAT(' BYTE REVERSAL LIKELY CAUSE ') 17 CONTINUE C C GBYTES ONLY TEST C NUMT=0 DO 40 IOFF=0,2*IWZ,3 DO 40 ISZ=1,IWZL DO 40 ISK=0,2*IWZ,3 C COMPUTE ITERATION LIMITS SO NO ACCESSES GO BEYOND BUFFER SIZE ITR=(IC-IOFF)/(ISZ+ISK) IF(ITR.GT.0) GO TO 20 PRINT 1001,IOFF,ISZ,ISK,ITR 1001 FORMAT(' INVALID GBYTES CALL IOFF,ISZ,ISK,ITR - ',3I5,I8) 20 CONTINUE C CALL GBYTES(NA,ND,IOFF,ISZ,ISK,ITR) C C COMPUTE VALIDATION VALUES C IV1=0 IF(MOD(IOFF,2).EQ.1) IV1=1 IV2=IV1 IF(MOD((ISK+ISZ),2).EQ.1) IV2=(IABS(IV1-1)) NV1=IV1 NV2=IV2 IF(ISZ.LE.1) GO TO 26 DO 25 I=1,ISZ-1 IV1=IABS(IV1-1) IV2=IABS(IV2-1) NV1=NV1*2 + IV1 NV2=NV2*2 + IV2 25 CONTINUE 26 CONTINUE IERR=0 DO 30 I=1,ITR,2 IF(NV1.NE.ND(I)) IERR=IERR+1 IF(I.GE.ITR) GO TO 30 IF(NV2.NE.ND(I+1)) IERR=IERR+1 30 CONTINUE NUMT=NUMT+1 IF(IERR.EQ.0) GO TO 40 PRINT 1002,IOFF,ISZ,ISK,ITR,IERR,NV1,ND(1),NV2,ND(2) 1002 FORMAT(' GBYTES FAILED - IOFF,ISZ,ISK,ITR,IERR ',3I4,2I8,/, C C MACHINE DEPENDENT FORMAT SPECIFICATION 1 1X,4Z9) C C ABORT TEST FOR FAILURE WHEN IOFF>IWZ AND FAILURE OCCURS C THIS PROBABLY MEANS THIS VERSION DOES NOT WORK FOR IOFF>IWZ IF(IOFF.GT.IWZ) GO TO 41 40 CONTINUE 41 CONTINUE PRINT 1003,NUMT 1003 FORMAT(' GBYTES ONLY TEST COMPLETE FOR ',I8, 2 ' COMBINATIONS OF IOFF,ISZ,ISK. ') C C C TEST BOTH GBYTES AND SBYTES C C DO 45 I=1,ID 45 ND(ID)=0 NUMT=0 DO 80 IOFF=0,2*IWZ,3 DO 80 ISZ=1,IWZ DO 80 ISK=0,2*IWZ,3 C COMPUTE ITERATION LIMITS SO NO ACCESSES GO BEYOND BUFFER SIZE ITR=(IC-IOFF)/(ISZ+ISK) IF(ITR.GT.0) GO TO 50 PRINT 1001,IOFF,ISZ,ISK,ITR 50 CONTINUE C DO 52 I=1,IB NA(I)=IMSK 52 NB(I)=0 CALL GBYTES(NA,ND,IOFF,ISZ,ISK,ITR) CALL SBYTES(NB,ND,IOFF,ISZ,ISK,ITR) CALL SBYTES(NA,NC,IOFF,ISZ,ISK,ITR) IERR=0 DO 60 I=1,IA NB(I)=NB(I)+NA(I) IF(NB(I).EQ.IMSK) GO TO 60 IERR=IERR+1 60 CONTINUE NUMT=NUMT+1 IF(IERR.EQ.0) GO TO 65 PRINT 1004,IOFF,ISZ,ISK,ITR,IERR,NB(1),NB(3),NB(3),NB(4) 1004 FORMAT(' GBYTES/SBYTES FAILED - IOFF,ISZ,ISK,ITR,IERR ',3I4,2I8,/, C C MACHINE DEPENDENT FORMAT SPECIFICATION 2 1X,4Z9) C C ABORT TEST FOR FAILURE WHEN IOFF>IWZ AND FAILURE OCCURS C THIS PROBABLY MEANS THIS VERSION DOES NOT WORK FOR IOFF>IWZ IF(IOFF.GT.IWZ) GO TO 81 65 CONTINUE 80 CONTINUE 81 CONTINUE PRINT 1005,NUMT 1005 FORMAT(' GBYTES/SBYTES TEST COMPLETE FOR ',I8, 2 ' COMBINATIONS OF IOFF,ISZ,ISK. ') PRINT 1006 1006 FORMAT(' ALL TESTS COMPLETE ') STOP END