!* !*********************************************************************** !* data items * !*********************************************************************** !* %EXTERNALINTEGER ADICT ;! @ of dictionary area %EXTERNALINTEGER MAXDICT ;! currect available length of dictionary %EXTERNALINTEGER ANAMES ;! @ of name table %EXTERNALINTEGER ABLOCKS ;! @ of block table %EXTERNALINTEGER MAXBLOCKS ;! current available length of block table area %EXTERNALINTEGER NEXTBLOCK ;! next available block index %EXTERNALINTEGER FREEBLOCKS %EXTERNALINTEGER CBNPTR ;! listhead of common block records %EXTERNALINTEGER SCPTR ;! listhead of local identifiers %EXTERNALINTEGER ATABS ;! @ of area for assorted optimiser tables %EXTERNALINTEGER MAXTABS ;! curent available length of opt table area %EXTERNALINTEGER FREETABS ;! next free location in opt table area %EXTERNALINTEGER EXBPTR ;! exit block table %EXTERNALINTEGER ENTBPTR ;! entry block table %EXTERNALINTEGER ALOOPS ;! @ loop table area %EXTERNALINTEGER MAXLOOPS ;! current available length of loop table area %EXTERNALINTEGER FREELOOPS ;! next free location in loop table area %EXTERNALINTEGER ATRIADS ;! @ of triad area %EXTERNALINTEGER LASTTRIAD ;! last allocated triad index %EXTERNALINTEGER MAXTRIADS ;! current available number of triads %EXTERNALINTEGER FREETRIADS;! listhead of released triads %EXTERNALINTEGER BLSIZE ;! length (in architecture units) of a block entry %EXTERNALINTEGER BSBITS ;! length (in bits) of bit string %EXTERNALINTEGER BSSIZE ;! length (in architecture units) of a bit strip %EXTERNALINTEGER BSWORDS ;! length in 2900 words of a bit strip %EXTERNALINTEGER OPT ;! optimisation level 0, 1 or 2 %EXTERNALINTEGER OPTFLAGS ;! tracing level 1 Triads 2 Blocks 4 Loops %EXTERNALINTEGER INHIBMASK ;! inhibits specific optimisations %EXTERNALINTEGER SRFLAGS ;! strength reduction diagnostic flags %EXTERNALINTEGER SRHEAD %EXTERNALINTEGER SRCH %EXTERNALINTEGER APROPTABS ;! @ bsbits * prop table entries %EXTERNALINTEGER CLOOPHEAD ;! head of list of all blocks in current loop %EXTERNALINTEGER PLOOPHEAD ;! subset of CLOOPHEAD list already processed %EXTERNALINTEGER DLOOPHEAD ;! CLOOPHEAD list - PLOOPHEAD list %EXTERNALINTEGER CLOOPTAIL %EXTERNALINTEGER PLOOPTAIL %EXTERNALINTEGER DLOOPTAIL %EXTERNALINTEGER DLOOPPTR ;! current DLOOP record %EXTERNALINTEGER LOOP ;! current pointer to looptab %EXTERNALINTEGER BACKTARG ;! blocktab index of back target block %EXTERNALINTEGER BTARGTRIAD;! index of triad within back target block to which new triads chained %EXTERNALINTEGER OLDBTARGTRIAD %EXTERNALINTEGER LOOPDEPTH ;! depth of current loop %EXTERNALINTEGER LOOPENT ;! blocktab index of loop entry block %EXTERNALINTEGER CURRBLK ;! blocktab index of current block %EXTERNALINTEGER CURRTRIAD ;! triad index of triad currently being processed %EXTERNALINTEGER PREVTRIAD ;! previous triad (for rechaining) %EXTERNALINTEGER ACMNCOORDS;! @ CMNCOORDS %EXTERNALINTEGER ACURRDEF ;! @ CURRDEF %EXTERNALINTEGER ASTFNDEF %EXTERNALINTEGER ARGRISK %EXTERNALINTEGER VALTEMPHEAD %EXTERNALINTEGER DESTEMPHEAD %EXTERNALINTEGER DTINDEX %EXTERNALINTEGER TEINDEX %EXTERNALINTEGER TECH %EXTERNALINTEGER DTCH !* %EXTERNALINTEGERARRAY CMNCOORDS(0:15) ;! %EXTERNALINTEGERARRAY CLOOPUSE(0:15) ;! %EXTERNALINTEGERARRAY PLOOPUSE(0:15) ;! %EXTERNALINTEGERARRAY DLOOPUSE(0:15) ;! %EXTERNALINTEGERARRAY CLOOPDEF(0:15) ;! %EXTERNALINTEGERARRAY PLOOPDEF(0:15) ;! %EXTERNALINTEGERARRAY DLOOPDEF(0:15) ;! %EXTERNALINTEGERARRAY CURRDEF(0:15) ;! %EXTERNALINTEGERARRAY STFNDEF(0:15) !* !*********************************************************************** !* Service procedures * !*********************************************************************** !* %ROUTINESPEC BLOCKSFULL ;! to be called when block table exhausted %ROUTINESPEC TABSFULL ;! to be called when opt table exhausted %ROUTINESPEC DICTFULL ;! to be called when dictionary is full %ROUTINESPEC LOOPSFULL ;! to be called when loop table is full !* %INTEGERFNSPEC GETTRIAD %INTEGERFNSPEC ALLDEF(%INTEGER INDEX) %INTEGERFNSPEC NEXTTRIAD %INTEGERFNSPEC NEXTTR %ROUTINESPEC UPDATE CURRDEF %ROUTINESPEC DELUSE(%INTEGER INDEX) %ROUTINESPEC DELUSEX(%INTEGER INDEX) %INTEGERFNSPEC LOOPCON1(%INTEGER INDEX) %INTEGERFNSPEC LOOPCON2(%INTEGER INDEX) %ROUTINESPEC TREVERSE(%INTEGER INDEX) %INTEGERFNSPEC BUSYONX(%INTEGER FROMORTO,BLOCK,IDPTR) %ROUTINESPEC SETCMNBITS(%INTEGER STRIPADDR) %ROUTINESPEC SETARGBITS(%INTEGER BLIND) %ROUTINESPEC SETBIT(%INTEGER STRIPADDR,INDEX) %ROUTINESPEC PUTBIT(%INTEGER STRIPADDR,INDEX,VAL) %ROUTINESPEC CLEARBIT(%INTEGER STRIPADDR,INDEX) %ROUTINESPEC GETBIT(%INTEGER STRIPADDR,INDEX,%INTEGERNAME VAL) %INTEGERFNSPEC CONOUT(%RECORD(RESF) R) %INTEGERFNSPEC CONOP(%RECORD(RESF) RL,%INTEGER OP, %RECORD(RESF) RR,%RECORD(RESF)%NAME R) %INTEGERFNSPEC CREATETAB(%INTEGER A) %INTEGERFNSPEC CREATEDTAB(%INTEGER A) %ROUTINESPEC PRBLOCK(%INTEGER BL) %ROUTINESPEC PRBLTRIADS(%INTEGER BL) %ROUTINESPEC PRINTBS(%INTEGERARRAYNAME B) %ROUTINESPEC PUSHFREE(%INTEGER VAL,%INTEGERNAME LINK) !*