# ACPPRC - STAGING MEMORY MANAGER ACP PROCESS DRIVER # # PURPOSE: DRIVE THE STAGING MEMORY ALGORITHM IN GER-17062 # # CALLING SEQUENCE: # # INTEGER = ACPPRC(IOPCKT,SMDATA,STWDS) # # INPUTS: IOPCKT IS THE IO PACKET BEING PROCESSED # # OUTPUTS: SMDATA IS THE BYTE ARRAY THAT CONTAINS THE FINAL HARDWARE CONTROL # PARAMETERS COMPUTED BY THE ALGORITHM. # STWDS IS THE SIZE OF A SINGLE STAGER BUFFER # INTEGER FUNCTION VALUE IS NEGATIVE IF AN ERROR IS DETECTED # DURING PROCESSING. MAGNITUDE OF VALUE INDICATES THE ERROR CODE # INTEGER FUNCTION VALUE IS POSITIVE IF ALGORITHM WAS COMPLETED WITHOUT # ERROR # # PROGRAMMER: CARL T. MICKELSON # GOODYEAR AEROSPACE CORP # 1210 MASSILLON ROAD # AKRON, OHIO 44315 # # PROJECT: MASSIVELY PARALLEL PROCESSOR (MPP) # # DATE: APRIL 1983 # ## INCLUDE "SMMDEF.RAT" INTEGER FUNCTION ACPPRC(IOPCKT,SMDATA,STWDS) INTEGER IOPCKT(1) CHARACTER SMDATA(CTLENG,1) INTEGER*4 STWDS INCLUDE "CSMMDF.RAT" LOGICAL LARGE INTEGER IERR,IERMV,IDM,NDM,WRDIM,I,J,N REAL*8 PKWORD,ST1,PKB(NMVMAX),PCENT INTEGER ACPINP #-ACP INPUT FUNCTION INTEGER SRTCHK #-SORT AND CHECK MULTIPLIERS INTEGER CHKMLT #-CHECK MOVE MULTIPLIERS INTEGER UNITY #-CHECK FOR UNITY MULTIPLIERS INTEGER DIVIDE #-DIVIDE DIMENSIONS FOR TRANSFER COUNTERS INTEGER FILGAP #-FILL TRANSFER COUNTER GAPS REAL*8 SDIFF #-SET DIFFERENCE FUNCTION REAL*8 SET #-SET ELEMENT FUNCTION REAL*8 SINTER #-SET INTERSECTION FUNCTION INTEGER INDEX #-SET ELEMENT SEARCH FUNCTION INTEGER PERSHF #-ACCESS MODE AND PERFECT SHUFFLE FUNCTION INTEGER PRMUSB #-SUBSTAGER PERMUTATION FUNCTION INTEGER TRTBAS #-TREAT BASE FUNCTION INTEGER ABCDEF #-A AND BCDEF REGISTER SETUP FUNCTION INTEGER CTLIFG #-CONTROL AND INTERFACE GROUP FUNCTION INTEGER IANDB #-EXTERNAL IAND FUNCTION (NEEDED DUE TO BYTE DATA FOR OUTPUT) ACPPRC = ACPINP(IOPCKT) IF (ACPPRC .NE. 0) RETURN IERR = SRTCHK(IERMV) IF (IERR .NE. 0) $( ACPPRC = -IERR RETURN $) IERR = CHKMLT(IERMV,IDM,NDM) IF (IERR .NE. 0) $( ACPPRC = -IERR RETURN $) IERR = UNITY(IERMV) IF (IERR .NE. 0) $( ACPPRC = -IERR RETURN $) IERR = DIVIDE(IDM) IF (IERR .NE. 0) $( ACPPRC = -IERR RETURN $) IERR = FILGAP(IERMV) IF (IERR .NE. 0) $( ACPPRC = -IERR RETURN $) IF (ACPPRC < 0) RETURN CALL RDINIT CALL WRDFMT CALL WRDFIN(PKWORD,WRDIM) IF (WRDIM .NE. 0) $( ACPPRC = -9 $) CALL BNKFMT CALL BNKFIN(PKB) CALL INMULT CALL MAIADR(STWDS,PCENT,LARGE) IF (LARGE) $( ACPPRC = -10 $) IERR = PERSHF(IDM,IERMV) IF (IERR .NE. 0) $( ACPPRC = -IERR $) IERR = PRMUSB(IERMV) IF (IERR .NE. 0) $( ACPPRC = -IERR $) CALL TRNREG(SMDATA) CALL NEGMLT(SMDATA) IERR = TRTBAS(SMDATA,IERMV) IF (IERR .NE. 0) $( ACPPRC = -IERR $) CALL PRMREG(SMDATA) IERR = ABCDEF(SMDATA) IF (IERR .NE. 0) $( IDM = 15 FOR ( ; IERR .NE. 0; IERR = IERR/2) $( IF (IAND(IERR,1) .NE. 0) BREAK IDM = IDM + 1 $) ACPPRC = -IDM $) IERR = CTLIFG(SMDATA) IF (IERR .NE. 0) $( ACPPRC = -IERR $) CALL MULREC(SMDATA) RETURN END