) "AUX" VAC) #DECL ((SVAR) > (NUM) (RES) (HINT) ) ) (T ) ( >> ) ( > )> NORMAL)>> > (NUM) (RES) ) LONG>)> >) (ELSE >)> )> NORMAL> ) "AUX" VAC LDISP CAC LABEL VAC1) #DECL ((SVAR) VARTBL (NUM) FIX (RES) ) PREF-VAL>>> >> ; "If the loser's already in an ac, use that" LONG> >) ( <1? .NUM>> >) (T > LONG> >)>)> > ) (<==? .NUM 1> ) ( LONG>)>) (ELSE >> >) (ELSE >)> > LONG> > )>)> .VAC> ) "AUX" (STATUS? <>) VAC CAC SLABEL ELABEL LADDR) #DECL ((SVAR) > (NVAR) VARTBL (OP) ATOM (RES) ) >) (ELSE >)> > > <==? .RES STACK>> > )>) (ELSE >> <==? .RES STACK>> > ) (ELSE > )>)> )> >)> > > > > LONG> > > <==? .RES STACK>> )> .VAC> ) "AUX" (TYP <>) RVAC TYPADDR CNTADDR VALADDR DAC) #DECL ((SVAC) AC (OFF) FIX (RES) (HINT) (INDXAC) ) 8>> > >> >> >> > .TYPADDR >) (ELSE >)>) (ELSE > .TYPADDR >) (ELSE >)> .RVAC .RES VALUE>)>> ) > > >) ( .SVAC) (ELSE >)>> (HINT) ) PREF-VAL>>> > )) #DECL ((SVAR) > (OFF) (RES) (HINT) ) ) (T ) (ELSE )> NORMAL)>> > (OFF) VARTBL (RES) (HINT) ) PREF-VAL>> > >> >) (ELSE PREF-VAL>>>)> > ) "AUX" (TYP <>)) #DECL ((SVAR) > (NUM) (RES) ) >> > > (NUM) (RES) ) > > (NUM) (RES) ) > > (NUM) (RES) ) > 0>> -1>> ) (ELAC <>) (PUT? <>) (TYPE-ADDR <>)) #DECL ((SVAR) ANY (SHFT) FIX (NUM) (RES) (TYP) ) ) (ELSE )>) (> >) ( ) (ELSE )> NORMAL> ) (TAC <>) (CAC <>) LV) #DECL ((NUM SHFT) FIX (SVAR) VARTBL (TYP) ) > > )> >> > >> )>) (T )>)> )> ) (.CAC )> >)>)> 16> FIX>> >) (.CAC >) (ELSE >)>) (ELSE >) (ELSE >)>)> > ) (.PUT? > ) (.ELAC)> >) (T ) (.ELAC)> >)>) ( ) (.ELAC)>>)>) (<==? .NUM 1> ) (ELSE )>>) (ELSE ) (ELSE )>>)> )> ) (T )>) (.CAC ) (T )>)> T> ) (CAC <>) LV (CN <>)) #DECL ((NUM SHFT) FIX (SVAR) VARTBL (TYP) ) >> >)>)> > >> 16> FIX>> >) (ELSE 16> FIX>> >)>) (> > .TYP> >) (ELSE >)>) (ELSE WORD> >)>) (ELSE >)> ) (> >) (ELSE > >)> 16> FIX>> ) (ELSE )>>)> > > > ) (.ELAC)> >) (T ) (.ELAC)> >)>) (T ) (.ELAC)>>)>)>) (<==? .RES STACK> > >) (T >)>) (>> >) (ELSE >)>) (ELSE .NUM> >)>>>) (T >)>>>)>)> ) (ELSE )>)>> ) (TAC <>) (CAC <>) LV (NAC <>) (COUNT-STORED? <>)) #DECL ((SHFT) FIX (NUM SVAR) VARTBL (TYP) ) > > )> >> > >> )>) (T )>)> )> )> > PREF-VAL>>)> > > ) (.CAC >) (ELSE >)> >> PREF-VAL>>)> ) (ELSE )>>) (<==? .SHFT 2> >) (ELSE >)> )> ) (T > )>)> > > ) (CAC <>) LV (CN <>) (NAC <>) (FORCE-CHTYPE? <>)) #DECL ((SHFT) FIX (NUM SVAR) VARTBL (TYP) ) > > PREF-VAL>>>)> >> ; "Structure has type word in AC" .TYP>> )> ; "Clobber type word, so COUNT-ADDRESS returns winnage" > >) (ELSE LONG> ; "Recycle type word AC onto stack" >)>) (> .TYP> ; "Structure has count in AC, so winnage is possible" >) (ELSE WORD> >)>) (ELSE >)> ) (ELSE ; "Get an AC for the result" > >)> WORD>) (ELSE >)> >) (ELSE > >) (ELSE )>)>)> .LV >> >) ( >>>) (ELSE >)>) (ELSE PREF-VAL>> ) (ELSE )>>) (ELSE ) (ELSE )>>)>)> .FORCE-CHTYPE? > >> ) (.CAC ) (ELSE )> ) (ELSE )> .TYP .SHFT> ) (ELSE > > > > >)>)>) ( ) (ELSE > > > > >)>) (ELSE )>)>> > WORD> > >) (ELSE > >>>)> >)> > ) (ELSE .VAC)>>) (ELSE > >)>> PREF-VAL>> ,INST-MOVAL) (ELSE ,INST-MOVAQ)> ) (ELSE )>>)> >)>> .TADDR>) (ELSE .TADDR WORD> LONG> > > .TADDR WORD> >)>> .NUM) (<==? .SHFT 2> <* .NUM 4>) (ELSE <* .NUM 8>)>> ) > > > > > > > >)> > > LONG> > > NORMAL> ) > >) (T > >) (T > >)> )>) (<==? .RES STACK> LONG> > >> > LONG>) (T >)>) (T > >> >>) (ELSE > >)> )> NORMAL> > <==? .VAC ,STATUS-AC>>> >)> ) (ELSE )> > .LABEL <> <>> NORMAL> ) ( >> >)>) (<==? .DIR +> >)> NORMAL> )) #DECL ((VAR) VARTBL (DIR) ATOM (LABEL) ATOM) >> > >) (> >) (> > ) (T >)> >> >) (ELSE )>) (ELSE >)> >) (ELSE >)>> VARTBL>) PREF-VAL>>> > ) (ELSE > .NADDR>)>) ( .NADDR>)> NORMAL> ) "AUX" VAC) #DECL ((VAR) VARTBL (OFF) (VAL) ANY) >)> .HINT>) ( >> .HINT>) (ELSE > .HINT>)> NORMAL> PREF-VAL>>> > ) "AUX" DTADDR DVADDR DCADDR ROFF (KLUDGE ) (ELSE <>)>>) LAC GAC DCL FX? LVAR (DONE? <>)) #DECL ((VAC) AC (OFF) FIX (VAL) ANY (UVC) BOOLEAN (INDXAC) (KLUDGE) TUPLE (LAC GAC) (LVAR) ) ) (ELSE >)> 4>>) (ELSE 8>>)> > > >) ( > ; "Lets us use literal" > !.KLUDGE >) ( LONG>) (ELSE !.KLUDGE >)>) (ELSE >>> >) (ELSE >>)> >)> > LONG .KLUDGE>)> >>) ( > > !.KLUDGE >>) (ELSE > LONG .KLUDGE>)>)>) (.UVC !.KLUDGE >) (ELSE !.KLUDGE >)>) (.UVC !.KLUDGE >) (ELSE > > > <==? .GAC >> !.KLUDGE >) ( >> > >> >>> !.KLUDGE >) (ELSE >>> >) (ELSE >>)> >)> >>) ( > >> >> > !.KLUDGE >) (ELSE > > ; "Will do right thing with atoms & stuff (they really need count)" !.KLUDGE>)>) ( ; "Could be better if could get around indexing stuff" > !.KLUDGE >) (ELSE > > > !.KLUDGE >)>) (ELSE > > ) (ELSE > > )> !.KLUDGE >)>)> !.KLUDGE >>)>)>)> .VAC> ) (UVC <>)) #DECL ((VAR) VARTBL (OFF) (VAL) ANY) >> ) (ELSE )> NORMAL> ) >> ; "Protect ACs for value, so don't clobber it when loading stuff." >)> >)> >)> >)>)>> PREF-VAL>>> PREF-VAL>>> .VAC> )) ) (T )>> )) ) (T )>> (NUM) ) PREF-VAL>>) (ELSE > )> > > >) (ELSE PREF-VAL>>> >)> NORMAL> (VAL) ) PREF-VAL>> >>) ( >) (ELSE > >) (ELSE >)>)> >> ) (ELSE PREF-VAL>>> > .DADDR>)> NORMAL> > ) "AUX" TYP VAC TAC CADDR RVAC (NAC <>) VAL) #DECL ((UVAR) (NUM) (RES) (HINT) ) ;>) (.HINT >) (ELSE )> > )> PREF-VAL>>) (ELSE > )> )> DATA>>> > WORD> ) ( WORD>)>)> >>)> 4>>>) (ELSE PREF-VAL>> PREF-VAL>>) (ELSE > >)> >)> LONG>)> .CADDR >) (ELSE >)>) (ELSE .CADDR >) (ELSE >)> ) (ELSE )>)> NORMAL> )) #DECL ((VAR) VARTBL (OFF) (VAL) ANY) > )) NORMAL> )) NORMAL> >> ) SHIFT) > )>> .HINTS> ) (T )> ) (T )>> )) > >> ; "If this guy is in AC, save everything, but remember that he's here." <1 .SAVES .TAC>) (<1 .SAVES <>>)> >> <2 .SAVES .TAC>) (<2 .SAVES <>>)> > > >) (T > > <3 .SAVES .TAC>) (> <3 .SAVES .TAC>) (T <3 .SAVES <>>)>)> ; "Now clobber all the ACs that don't have our arguments" > )> > )> > )> > )> > )> > )> >) ()>) (T )> >) (T )>) (T 4>>)> >) (T )>) (T 4>>)>> ; "Clobber acs that had our arguments" 5>> )>> .SAVES> NORMAL> > >> ; "Handle constants, just for fun" )>) (<=? .STR1 .STR2> )> UNCONDITIONAL-BRANCH) (T ; "First, make sure lengths are equal" >> >> >)> >> >> >)> ) (T >)> ) (T >)>> > ; "Jump if different lengths, since that's all we need." <> <> T>) (T ; "Jump to failure location" <> <> T>)> <1 .SAVES <>> ; "Try to get an AC with length" > <1 .SAVES .TAC>)>)> > > > <1 .SAVES .TAC>)>)> ; "Try to get AC with 1st string pointer" >> <2 .SAVES .TAC>) (<2 .SAVES <>>)> ; "2nd string pointer" >> <3 .SAVES .TAC>) (<3 .SAVES <>>)> ; "Make sure nothing left in these acs" > ) ()> > ) ()> > ) ()> > ) ()> ; "Do compare" >) (> >) (> >) (T )> ; "First pointer" >) ( ) (T 4>>)> ; "Second pointer" >) ( ) (T 4>>)>> ; "Clobber the acs we munged" ; "And jump to the right place" >) (T >)> ; "Will jump here if lengths not equal and dir +" > CONDITIONAL-BRANCH)>> > >> >) (T >)>) (T LONG> > >>) (> >) (T > >> >)> >)> LONG> > >) (> ) (T > > >)> )>> > > <> <> T> <> <> T> ; "First is longer than second, so bias toward returning 1" LONG> ; "Get right length into ac-3" ) (T >)> LONG> <> T> > ; "First is shorter" LONG> > > ) (T )>) ( 4>>)> > ) (T )>) ( 4>>)>> > > ; "Just return what's in AC-4" <> <> T> <> <> T> LONG> <> T> > LONG> > LONG> LONG>) (T )>)> NORMAL>