> )> > FIX>> > FIX>> > FIX>> <2 .A>> >> )>> > ) )>> .L>> )) #DECL ((TBL) (AC) AC) > AC .AC> ) (T NEXTAC > X*> T*) (ELSE >)>> > X*> T*) (ELSE >)> AC-PAIR > > X*> <3 .TBL>) (ELSE <2 .TBL>)> AC-PAIR .AC> > X*> T*) (ELSE >)>> AC .AC>)>> ,AC-TABLE> <3 ,AC-TABLE> <4 ,AC-TABLE> <5 ,AC-TABLE> <6 ,AC-TABLE> <7 ,AC-TABLE>]> <> <> DUMMY] ACSTATE>> ,AC-PAIR-TABLE>> ) STACK) (T )>> > > > )) #DECL ((ITM) ANY (TYP) ATOM (AC-FORCE) ) > STACK) (T )>> )) #DECL ((ITM) ANY (TYP) ATOM (BOTH) ) ) NAC) #DECL ((ACT) VECTOR (NAC AC) AC) >) (<==? .ITM> TYPE> > <==? VALUE> <==? .ITM>> >)>) (<==? .TYP> >)>)>> ,AC-TABLE>)>> ) >> > > )> >> .ITM> ) (ELSE > DUMMY>)>) (<==? .NAM .AC>) (T > <>> ) (ELSE )>)> .NAM) (T <> >)>>)>> .ITM> > )>> ,AC-TABLE>> (OFF) FIX) > > CONSTANT>>) (T 3> > >)> <+ > 18>> FIX> >) CONST-W-LOCAL>>)> >> ) (ASSIGN <>) (LAC <>) (NAC <>) "AUX" (BOTH <==? .TYP BOTH>) (LOW FIX>) AC TIM (FIRST-AC ,FIRST-AC) NUM LCL TAC PT IDX) #DECL ((ITM) ANY (TYP) ATOM (LOW TIM) FIX (LAC NAC) (BOTH UPDATE ASSIGN AC) (NUM) (TAC) AC) > > > > <==? .TYP BOTH> ;"Check if either type or value already winning" > ;"Either load value or flush type.." <==? .AC B1*> <==? .AC B1*>> >> ;"Undo what CLEAN-ACS does to AC" TYPE> .ITM>> > > <>> <>)>>> > ;"Either load type or flush value..." <==? .AC B2*> <==? .AC C2*>> >>> ;"Undo what CLEAN-ACS does to AC" > VALUE> .ITM>> > > <>> <>)>>>>>>> > .UPDATE> >> .UPDATE> )>)> .AC) (T .ITM .TYP>> ATOM>> >> ATOM>>>>>> )) #DECL ((ACT) ) >>> ) (.BOTH > X*> > X*>> > >>> >> >>>>>>> > > >) ( >> >>>>>> > >)>)>)>) (> X*> > T*>> >> >> >>>>>>> > ) ( >> >>>>>> >)>)>)> >) (T >)>>> > >>)> > )> #LOSE *000000000000*>) ( .ITM>) (ELSE <>>)> > > ,AC-STAMP>> <>> > )> #LOSE *000000000000*>) ( .ITM>) (ELSE <>>)> VALUE> ,AC-STAMP> .UPDATE> <>>)> .UPDATE> > >>> >> > .ITM .IDX>) (<==? .TYP VALUE> .ITM .IDX>) (<==? .TYP LENGTH> .ITM .IDX>) (<==? .TYP TYPECODE> > (<- ,STACK-DEPTH> .ITM .IDX)>) (T .ITM .IDX>)>) (T )>) (> WORD> <==? .PT FIX>> > ,MAX-IMMEDIATE> <0? FIX>>>> LIST> >>> <==? .TYP VALUE>> ,TYPE-WORDS>>>> ; "Hacked by TAA to do immediate instructions when possible even when loading BOTH. TAC is AC that will have value word; type word (when BOTH) goes into LAC, TAC becomes NAC. Otherwise, TAC becomes LAC." > ) ()> LIST> ) (<0? FIX>> FIX>>) (T ;>> ,MAX-IMMEDIATE > > 0> >) (ELSE )>)>) (T > 2>> ) (<==? .TYP VALUE> ) (<==? .TYP LENGTH> ) (<==? .TYP TYPECODE> > (.NUM '(M*))>) (T )>)> >)>> ) L) #DECL ((LBL VAR TYP) ATOM (LB) ) > >> >>>>> ) NXT) #DECL ((ACS) ACSTATE (NXT) ) <==? > .VAR> .TYP> <==? TYPE>>>> >> >> <==? > .VAR> <==? VALUE>>> >)>> .L>)>> >)> > ATOM> > ) (ELSE >)>) ( >> > LOOKA-AHEAD>> ) (<==? .X CONS> > ) (ELSE )>>) (<==? .ITM <3 .IT>> ) (ELSE )>>) (ELSE >)>) ( >> .ITM .TYP>> )>) ( <==? <2 .IT> .ITM>> >) (> <==? <2 .Y> .ITM>> >) ( >> >) ( <==? <2 .IT> .ITM>> >) (ELSE >)>) (<==? .X RETURN> >)>)> >>)>> ) "AUX" (ITM ) (TYP ) NAC NUM LCL (T1 ) T2 (ACSTMP ,AC-STAMP)) #DECL ((NAC AC) AC (ITM) ANY (TYP) ATOM (NUM ACSTMP) FIX (LCL) ) > > >> )>) (>> >> )>) (T )> >> >> <==? VALUE> <==? >> >> > <==? TYPE> <==? >> > > > >>>> > OARG>> <- 1 ,STACK-DEPTH> .ITM >) (T <- ,STACK-DEPTH> .ITM >)> )> >) (<==? .TYP TYPE> > <- ,STACK-DEPTH> .ITM > )>)>) (<==? .TYP VALUE> <- 1 ,STACK-DEPTH> .ITM > )>)>)>)> )>> ) > >> >) ( > >> >)>> <>>> ) (A1 <>) (A2 <>) "AUX" NXT LB (MIML .MIML)) #DECL ((TAG) (NXT) ANY (MIML) LIST) >>)> <==? .TAG UNWCONT>> ;"Don't bother" )>) (T > > > > FORM> <==? <1 .NXT> DEAD>> T .NO-TY> > ) ( > )>)>> )> ,NO-AC-FUNNYNESS> >)>> ,AC-TABLE> )>) (,PASS1 )>) ( )>)>> ) "AUX" RAC) #DECL ((AC) ATOM (RAC) AC (BOTH) ) >> )> >>>> )>> >> )> >>> )> > > > > T*> >> ,AC-TABLE>> >> DUMMY> <==? > DUMMY>> >> DUMMY> <==? > DUMMY>> >> DUMMY> <==? > DUMMY>>> .OAC)>> ) "AUX" AC) #DECL ((NAM) ATOM (NXT?) (AC) AC) > <>> > > >> <>> > >)>> > <==? 2> <==? <1 .ITM> QUOTE>> > ATOM> )>) (ELSE >)>> ; "This will strip off one level of quoting only when the thing ultimately quoted is an atom; in other cases, all levels need to remain." >)> > ,MV-TABLE-LENGTH> 1>>>> .HC> <=? .ITM>> )>> .BK>) (ELSE >] MBUCK>> !.BK)> >>)> > ) 1> <==? <1 .ITM> QUOTE> ATOM>> >)> >> <2 .M>) (>> <- >)>> ) >) (> LOCAL> <==? .ATM>> >) (<==? .ITM .ATM> )> >>> ) >) (> LOCAL> <==? .LN>> >) (<==? .ITM .LN> )> >>> (P) ) > <* FIX> 2>) (> <* 2>) ()>> ) (CNT 0) (LNUM 0) (TUP <>) (FL ()) TMP) #DECL ((FL L C) LIST (CFLG) (CNT LNUM) FIX (TUP) ) > INST> <==? <1 .TMP> MOVE> >> > >)> )> > > !.FL)> > >)>) (T >)> > > FIX> 1>>)>)>> .L> (WV) FIX) )> FIX> .WV -1>> >>)> > 1>> ,FINAL-LOCALS> )> > )>> )) #DECL ((T) TUPLE (LABEL) ) > ATOM>> > ) (> 45> )> )> ) AC FOO AC1) #DECL ((X) ANY (AC) (FOO) ) >>> > >>> > .FOO> >)> > <==? >> )>)> > > >> .FOO> >) ( >> > .FOO> >)>)> >> > <==? >> )>)>> .T> > ) ( ATOM> >) (ELSE >)> ) ( ATOM> >) (ELSE >)> ) (ELSE )> > .T>)> >) ( > )>>>)>> > (COD) (M) ) > FIX> >> ! <2 .M>> FIX>>] INST>)>>>) (T )>>>)> ) ( ATOM> >) (ELSE >)> ) ( ATOM> >) (ELSE >)> ) (ELSE )> > .T> )>)>> >) (ELSE ) (ELSE >>)>)>> ) HC BUCK INDX FCB) #DECL ((INDX HC LS) FIX (ITM) (BUCK) (FCB) CONSTANT-BUCKET) >) (ELSE <2 .ITM>>>)> > ,CONSTANT-TABLE-LENGTH> 1>>>> > <==? .ITM >> > CONST-W-LOCAL> <==? <1 .TEM> <1 .ITM>> <==? <2 .TEM> <2 .ITM>>>>> )>> .BUCK>) (ELSE CONSTANT-LABEL> 0] CONSTANT-BUCKET>> )> ()> > CONSTANT-LABEL> 0] CONSTANT-BUCKET>> !,CONSTANT-VECTOR)> > ) >>> (<- .OFF ,STACK-DEPTH> > )) (T > 2>> (<+ .OFF .NUM> '(M*)))>> >> .CV>> ) R X) > >> REF>> > CONSTANT-BUCKET>> ) (,MAX-SPACE <2 .IT> 0 '(R*)] INST>>) (ELSE <2 .IT> '(R*)] INST>>)>)>> .C>> ) >> (.AC)) (<==? FIX> VALUE>) ( ) (T )>> ) > (.AC)) ( FIX> ,TYPE-WORDS>> ) (T )>> ,LABEL-OBLIST> ,LABEL-OBLIST>>> )> > ) (NO-TY <>)) #DECL ((LCLS) (PRED?) ) )> (LCL) LOCAL) > .LCLS> ,LOCALS> ,ICALL-TEMPS>>>> > > > .FOO> >)>)> > > )>)>> ,AC-TABLE>> > >)> >>>> >> ) (CP ()) "AUX" (LB <>)) #DECL ((NAM) ATOM (IND) ) > >) (.IND )> .LB) (ELSE >> .LB)>> ) "AUX" LB) 0 .CP ()] LAB>> !,LABELS)> > ) .NAM> )>> .LBLS>> ,.NAM)>> ) "AUX" L) #DECL ((TYP) ATOM (L) ) > )) (ELSE <2 .L>)>) ( 1>)) (ELSE )>) (T )>> (VAL) CONSTANT) > 18> CONSTANT>> > > CONSTANT>>)> ) ( 1>) (T )>> ) (TAG <>) (TYP <>) "AUX" AC (OC )) #DECL ((NAM) ATOM (VAL) (AC) AC (OC) FIX) ) (ELSE >)> >)> >)> > (AC) AC) >)>) (.VAL > >> > )>> ;"Actual code for open-coding specific MIM instructions" > )) #DECL ((FRM) FORM (ATM EVF) (OBLIST) ) ,V1 > )) #DECL ((L) LIST) > ,EVALABLES>> > )>> .FRM> > ,MIMOC-OBLIST>> > > > .FRM>)>) (T )>> ;"Gross and disgusting hack for UNWINDage" BOTH>> FIX> 0>) (ELSE 0 '(R*)>)> <2 .L> !,LOCATIONS)>)> R*>)>> ) ) (T 3 >>>)> >>> >) (ELSE >)>> ) (LOOP? )) #DECL ((LB) LAB (LS) LIST) LOSE>>> ,LOCALS>> ,ICALL-TEMPS>>>>) (ELSE >)> >> >> > > >)> TYPE> > > .AC> >>> )> VALUE> > > .AC> >>> )> > ] ACSTATE>> TYPE> ) (ELSE )> .ACS) (ELSE .NULL-STATE)>> ,AC-PAIR-TABLE ,NULL-STATES> LABSTATE>> ) (ELSE 1>> (.NS)>)> >)> ) (ELSE >)> )> ) (ELSE )>> ) ACS) #DECL ((AC) AC) >> > >>>) (ELSE >)> TYPE> > > .AC> >>> )> VALUE> > > .AC> >>> )> > ] ACSTATE>> TYPE> ) (ELSE )> .ACS) (ELSE .NULL-STATE)>> ,AC-PAIR-TABLE ,NULL-STATES> LABSTATE>> )> > )> > )> > > >> T) (ELSE > )> > >>> >>)> )>)>> >)> ,KILL-ONE-STATE >> >>>> > > ) FALSE>> )>> .LSTATE>> ) (AC-P2 <>) (LS ) "AUX" (LOOP? ) (MOVES-TO ()) SAVED? (MOVES-FROM ())) #DECL ((LB) LAB (LS) LABSTATE) ) (LCL2 ) (NEW-AC? <>)) #DECL ((STAT) ACSTATE (AC) AC) >)> .LCL2 > > >> T) (ELSE >)>> .DISP-L>) (ELSE T)>> > > >)> > <==? .LCL2>> >> > > > .LCL2>>>>>> >)>) ( .LCL2>> >>> > <==? >>>> )>) (> )> .LS T>> > >)>> .LS> > > > -1>>>) (ELSE > !.MOVES-TO)>)>)> > > > -1>>>) (ELSE > !.MOVES-TO)>)>)> > > ) PAT1 PAT2 AT1 AT2 AF P-TO? P-FROM) #DECL ((AT1 AT2 PAT1 PAT2) FIX (AF P-FROM) AC (PT PF) > (AC-TO? P-TO?) ) > > >) (.AC-TO? > > > >>> >> > <==? > > > <==? > > >> > > > > >) ( >) (ELSE >)> > >)>)>> .MOVES-TO .MOVES-FROM> )> ) (AC-FROM <1 .PF>) PP1 PP2 AT1 AT2) #DECL ((AT1 AT2) FIX (PT PF) > (AC-TO? AC-FROM) ) > > > > > > )> > > )> )>> .MOVES-TO .MOVES-FROM>)> >)> ) (.LOOP? )> )) (ELSE ())>)>> )) #DECL ((L1 L2) ) > ) ( )>)>> ,AC-PAIR-TABLE> .BEST> )) #DECL ((STAT) ACSTATE (AC) AC) >> > >> >) ( .LS> > DUMMY> <>> 0>) ( TYPE> <==? VALUE>> >)>> .LS>> )) #DECL ((STAT) ACSTATE (AC) AC) > >> >)>> .LS>> )) #DECL ((LS) LABSTATE) <==? > .ATM> <==? .COD > >>> )>> .LS>> )) #DECL ((LCL) LOCAL) .ATM> <==? .COD>> )>> ,AC-PAIR-TABLE>> )) #DECL ((LB) LAB (LS) ) > > > >> > >>>> > )> > > > ) (ELSE > >> >> >)>> .LS> ) (ELSE )> T> >)> > )> >)> >> >> > >)>> >> >> " stored ") (ELSE " not stored ")>> >)> ) (<==? DEAD> >> >>> )>> .LS>> ) TEM) #DECL ((LAB) LAB) >) (> > >)> > ) (ELSE )>> ,LABELS>> (FIRST) LABSTATE (LAB) LAB) ) (ELSE )>> )>> .RESTP> > )) #DECL ((ONE TWO) LABSTATE) ) (ACST2 <1 .AP2>) (NULL-STATE <1 .NSP>) (LD <>)) #DECL ((ACST1 ACST2 NULL-STATE) ACSTATE) <==? > >> <==? > > >> .LD> .LD> >>>>> > >> >> >> ) ( HACKED> <==? HACKED>> ) (ELSE >)>)>) (ELSE > >)> > > >>>>> >> T> > <>>)>)>> .ONE .TWO ,NULL-STATES> .CHANGED> ) (WINNERS 0)) #DECL ((ONE TWO) LABSTATE (WINNERS) FIX) > > <==? > >> <==? > > >> > > >> >> > HACKED> <==? HACKED>> >> > >> > >>>> >> > T> > T>>>> > >> >> HACKED> <==? HACKED>> ) (ELSE > >)>)> )>> .TWO>>) (ELSE >> T>)> > <>>)>> .ONE> > 0> >> )>)>> .TWO> .CHANGED> > >>> >) (ELSE >)>> > > >) (ELSE >)>) (ELSE >)>> )) >) (ELSE >)>> )> )> )>