> )> > >> ;"----------------------------------------------------------------------------" ) (PREVIOUS <>) ZERO) #DECL ((T) (PREVIOUS) > (CODE-L) LIST) ) BACKLIST OPP REFERENCE NXT TMP) #DECL ((NEW-T) > (ITM) (BACKLIST) LIST) ) ( ;"Handling of references" > )> ,LOOPTAGS>>> )> > ,LOCATIONS>>> ] OLD-AND-USELESS>>) ( > REF> <1? >>> )>) ( ) ( >> > <==? > <3 .NEW-T>> OPPOSITE>>> >> 1 .OPP> 3 .REFERENCE> !<3 .REFERENCE>)> >>)>) ( > ) ( PUSH> ATOM> >> >) ( ADDI> <==? <1 .ITM> SUBI>> <==? <3 .ITM> 1> <==? 3> >> > INST>> JRST> ADDI> AOJA) (T SOJA)> .ITM .NXT 2> >) ( '[JUMPL JUMPGE JUMPLE JUMPG JUMPE JUMPN]>> <==? <2 .NXT> <2 .ITM>>> ADDI> >) (T >)> .ITM .NXT 3> >)>)> OLD-AND-USELESS>> >)>> .T> .CODE-L> (NEW-OP) ATOM (CINST NXTINST) INST (BASE) FIX) .BASE> ;"JRST @" <- .BASE>>>> 1> .NEW> <- <- .BASE 1>> 1>>> <2 .NEW-T >>) (T <3 .CINST > <2 .NEW-T .CINST>)> >> REF> 3>> )) )>> LIST>>)> <1 .CINST .NEW-OP>> ; " Generate-circular-references makes labels be circular objects. First all the tags are found and a dummy reference shell is created. Then for all the lines which contain references, one links up the code and outputs the circular lines." (TAGS) LIST) T '()] REF>>> ,LABELS>> ) ;"Current line" LAST ;"Last item in current line" LL ;"Reference list segment" NEW-REF) ;"New reference" #DECL ((CODE) (LINE) (LAST) (LL) (NEW-REF) REF) >> REF> .TAGS>>> DISPATCH> .TAGS>>> GFRM SGFRM SBFRM> ATOM> .TAGS>>>>> > )> .NEW-REF> GFRM SGFRM SBFRM> >>>)>) ( >> >) ( ;"Reference which was deleted" >)>> .TUP>> ;"Delete-adjacent-refs will delete the first reference of a pair of references next to each other and call itself recursively." ) (NXT <2 .TUP>) USELESS) #DECL ((TUP) (NXT) (ITM) REF) ;"Deletes adjacent ref" )> GFRM SGFRM SBFRM> >>>)> .ITM>> LIST>> ] OLD-AND-USELESS>> >> )> >) (ELSE )>>> ) )> ) C) #DECL ((TUP) (LINE) ) PUSH> <==? <2 .LINE> .AC> > REF> <==? <1 .C> .ZERO>> >) (ELSE )>> .NEW-T> > > > > > ) (TUP )) #DECL ((CNT) FIX (TUP) (ZRO) OLD-AND-USELESS) >>) (ELSE >> >)>>)>> ) (NEXTLINE >> <2 .NEW-T>>) OPP FOO) #DECL ((NEW-T) (ITM) INST (PREVIOUS NEXTLINE) ) >> > >> <3 .NEW-T>> <==? .FOO .NEXTLINE>>> >> OPPOSITE>>> >>) ( >) (ELSE >)>)>> (RF) ANY (L) LIST) > ) ,PEEP-CHANNEL>)> > 1 <1 .STATEMENT>>) ( )>) ( <==? <1 .STATEMENT> DISPATCH> > REF>> > )> > 1 .STATEMENT>) ( >> REF>> SGFRM GFRM SBFRM> T>) (ELSE ] REF>>)> )> > 1 .STATEMENT>) (ELSE )> > 1 .STATEMENT>)>> .T> > >>) (BACK2 <1 >)) #DECL ((TUP) (BACK0 BACK1 BACK2) ) >) (> > <==? .BACK0 >>>>) (ELSE >)>> ) ,CJ-JUMP-LIST>> ) ,CS-JUMP-LIST>> ) ,UJ-JUMP-LIST> >> REF> COMPERR>>> ) <==? <1 .ITEM> CAIA>> ) >> (JUMP-LIST) !]>> )> > ) (ACS '(A1* A2* B1* B2* C1* C2* T* X* O*))) #DECL ((BACKREG-LIST ACS) LIST (TOP-OF-TUP NEW-T) (LBL) ) >)(NTUP ) ACC?) #DECL ((STATEMENT) (NTUP) > (ACC?) ) PUSHJ> <==? <1 .STATEMENT> JSP>>>> ) ( > .ACS> >> )) #DECL ((ACLIST) LIST (AC) ATOM) >) (ELSE )>> .ACS>> ) ( 1> > ATOM> > )) #DECL ((ACLIST) LIST (AC) ATOM) >) (ELSE )>> .ACS>>)> <==? .NTUP .TOP-OF-TUP>>) (ELSE >>>)>> ) STM) #DECL ((NTUP) (STATEMENT) ) ) () ( .ACS>> >> !.ACS)> >> >>) ( !.ACS)>)>> >> ) '[MOVE DMOVE MOVSI MOVEI MOVNI]> >>> >) (<==? > #CONSTANT *000000000000*> >) (ELSE >)>>> ) (DESTINATION <2 .LINE>) DESTINATION2 (SOURCE ATOM> <3 .LINE>>) SOURCE2 USEFUL-CODE) #DECL ((LINE) INST (LABEL) ATOM (NEW-T) (DESTINATION SOURCE) (SOURCE2 DESTINATION2) (USEFUL-CODE) LIST) .SOURCE > )) #DECL ((LINE) ) ) (ELSE )>) ( ) ( ) ( JRST> <==? <2 .LINE> @>> <==? <1 .LINE> PUSHJ> <==? <1 .LINE> JSP>> ) (ELSE )>> >> ) ( >> >>) ( > > > >> >>)>)>> ) > ) ( '[MOVE DMOVE]>) (> )>> .CODE>> )(MOVED? <>) (LDEST (.DEST)) (DEST2 ) (LDEST2 ) (SRC-USED <>) (DST-USED <>) R) #DECL ((ACCUM) ATOM (CODE) LIST) ) > ) ( > ) (ELSE <>)>) ( >> '[DMOVEM MOVEM]>> ) (ELSE <>)>) ( >> '[DMOVEM MOVEM]>> ) (ELSE <>)>) ( >> '[DMOVE MOVE MOVSI MOVEI MOVNI]> >> LIST> .ACCUM> <==? <1 .R> .ACCUM2>>>>> <>) ( >> ) (ELSE <>)>) ( >> ) (ELSE <>)>) (ELSE <>)>> .CODE>> > DMOVE>) (REG <2 .ITM>) (INDEX (.REG)) AFT-SKIP (REG2 >) (INDEX2 )) #DECL ((ITM) INST (BOTH) (REG) ATOM (REG2) (INDEX2) (NEW-T) ) ) (OP <1 .LINE>) F) #DECL ((TT) (LINE) (F) ANY) ) (ELSE >>)> ) ( <==? .OP JSP> <==? <2 .LINE> @>> >> ) ( [DMOVE MOVE MOVNI MOVSI MOVEI]> <==? <2 .LINE> .REG> <=? .LINE .ITM> >> LIST>> .REG>>> > >>) ( ) ( > LOCAL-NAME> <=? >> >> >>)> ) ( > > ) ( > >> ) ( >> > ) ( > ) (ELSE >)>> >> )(JUMP1 <2 .NEW-T>) (TAG2 >) (FLUSHIT T)) #DECL ((NEW-T) (TAG1 TAG2) REF (JUMP1) INST) SGFRM> >) (ELSE GFRM SBFRM> >>>)> .TAG2> )>)>> <3 .TAG1>> ] OLD-AND-USELESS>> >> >>>> >>)>)>> REF> <1 <3 .ITM>>>) CONSTANT FIELD1 FIELD2 CONSTANT-THING) #DECL ((ITM) INST (REG1) ATOM (REG2) (CNST) (CONSTANT CONSTANT-THING) ANY (FIELD1 FIELD2) FIX) > > > FIX>> > FIX>>> >> >>> >>) (ELSE T)>> )) #DECL ((TUP) ) )) >) ( )>> >> > > )> ] OLD-AND-USELESS>) ( >> REF> <==? 3> LIST>> ) (ELSE )>> <3 .LAST>>> ] REF>> ) (ELSE )>> >