> )> M$$BINDID > ) (TYP <2 .L>) A) #DECL ((L) ) >> >)> )> 2> )>> ,MIMOPS> "Generate function starting pseudo-op" ) "AUX" TT) #DECL ((ARGS-NEXT) LIST) >>> >> "Generate temp pseudo-op and return pointer to list so that others can be dynamically added" (TMPS-NEXT) ) > > .TMPS-NEXT> > "Here to change any TEMPS to ADECLs if possible" ) > > > > .TYP>)>> .L>> )) #DECL ((TMP) TEMP (TL) LIST) )) > )>> .TL>> "Here to create a temporary" ) (NO-RECYC <>) "AUX" TMP (TN .TMPS-NEXT) (FT .FREE-TEMPS)) #DECL ((TMP) TEMP (EVERY-TEMP TN FT FREE-TEMPS TMPS-NEXT) LIST) .ARG-TEMP> > )>>)> > 1) (ELSE 0)> .TMPS T) (ELSE <>)> .NO-RECYC ) (ELSE NO-RETURN)>] TEMP>> .TMP) ( >)> >> NO-RETURN> .ALLOCATE>>>> >) (ELSE >)> )> >>>> .TMP) (ELSE > > )> .TMP)>> ;"Special version of GEN-TEMP for in other frame" (TMPS-NEXT FREE-TEMPS) (ALL-TEMPS-LIST) ]>) T>> )> > > > ) (ELSE >)> .TMP> ) "AUX" (L .ALL-TEMPS-LIST)) #DECL ((L ALL-TEMPS-LIST) ]>) ) (ELSE )>)> > .TMPS> >) (ELSE ) (ELSE <4 <1 .L>>)>>)>>> ) INIT "AUX" (NM ) L (SPEC )) #DECL ((TMPS-NEXT) LIST (NM) (TMP) TEMP) > .TMPS> >) (ELSE T>> )> <2 >>)> )> > .TY>>>) ( >)> 1>>> > 0>>> > > >> ) (ELSE T>> > >>> )>)>)>)> >)>)>)> .TMP> > 0>>)> .TMP> "Generate a unique atom for label, temp name, var name etc." ) >)> >>> > FIX> 48>> 0> > >) (ELSE >)> >> "Add an instruction to the output code" ) )>>> .X>> > ) (PAST= <>) FOR-SETRL (DO-LATER-SETRL <>) (FREED-TEMPS ()) TMP CP) #DECL ((X) (DEAD-TEMPS FREED-TEMPS) LIST (CP CODE-PTR) LIST) > ) Z) #DECL ((XP) (Z) TEMP) )> >) ( .TMPS> >>> > > <2 .XP> !>) (ELSE > !>)> >) ( > !.FREED-TEMPS)> !.DEAD-TEMPS)>) (ELSE > )>) (ELSE )> > 0> !.DEAD-TEMPS)>)>) ( ,TMP-OBL>> >)> 1> >> >> >> FORM> > <==? <1 .TMP> `DEAD>> )> > .DO-LATER-SETRL>)>)> >> .FREED-TEMPS> > >)> T> >>) "AUX" (XTMP .LTMP) (ELSE )>) (TMPS <1 <1 .ALL-TEMPS-LIST>>) (ALL-TEMPS-LIST )) #DECL ((TMPS) (ALL-TEMPS-LIST) ]>>) > .TNAME >>> >) (ELSE .TNAME >)> .XTMP> "Generate a label in the code" > "Generate jump to label" > "Generate code to PUSH something onto stack. It can be called with various arguments: 1) #TEMP - refernce to a named temporary 3) #MIM-SPECIAL atom - MIM special variable 4) other - quoted object " >) ( ) (<==? .ITM ,POP-STACK>) (ELSE >)> ,TOP-STACK> >) (<==? .ITM FLUSHED> ) ( > ) (ELSE )> .ITM> >> " Generate FIXBIND to wrap bindings pending by linking up atoms." > " Generate code for optional arguments." > > > )> .INIT>) (ELSE > > )>>)>> "Get the value of a special variable bound in the current function" ) "AUX" (BTMP > <==? ANY>> > <==? .TMPS>> .TMP) (ELSE )>) (FQA ) (TG1 ) (TG2 ) BIDTMP1 BIDTMP2) #DECL ((BTMP BIDTMP1 BIDTMP2) TEMP) ) (ELSE > )>)> .TMP> "See if a special variable is assigned" ) "AUX" (BTMP ) (FQA ) BIDTMP1 BIDTMP2 (TGX ) (ELSE .TG)>)) #DECL ((BTMP BIDTMP1 BIDTMP2) TEMP) .TG>) (ELSE > )>> "Set the value of a special variable bound in the current function" ) "AUX" BTMP (FQA ) (TG1 ) (TG2 ) BIDTMP1 BIDTMP2) #DECL ((BTMP BIDTMP1 BIDTMP2) TEMP) ) (ELSE > ,RBN> )> .TMP> "Generate code to set a MIM local" ) "AUX" (TMP ) (TY ANY) (REFS )) #DECL ((SYM) SYMTAB (TMP) TEMP (REFS) FIX) ) (ELSE )>> )> >)>> ) (ELSE )>>)> >) (ELSE >)> ) (ELSE )>)>> "Quote atom to protect the MIM assembler" )> <==? 2> <==? <1 .Y> QUOTE>> >) (ELSE >)>>
) (ELSE .X)>> " Return currently running FRAME " )) .FR> " Return TUPLE of arguments" > .FR> "Compare # of args supplied with a constant and jump in appropriate case" > T> "Get current binding at top of world" > "Get an arg by arg number and mung into a local" ) (ATMP )) #DECL ((SYM) SYMTAB (TMP) TEMP) >> "Generate call to MSUBR" > .NARGS>) (ELSE .NARGS = .W>)>> > .NARGS = .W + .LABEL .COUNT>> "Begin building a FRAME for a future call" )) >>) (ELSE )>> "Generate a VECTOR of the top N things on the stack" )) '<`TYPE-CODE VECTOR> .N = .V> .V> )) '<`TYPE-CODE UVECTOR> .N = .V> .V> "Same for TUPLE" .V> "Same for LIST" > "Generate code to move datum from place to place" > >> <==? 2> <==? <1 .FROM> QUOTE> ATOM>> '(`TYPE ATOM)) (ELSE (`TYPE ))>> >) ( > >) ( >) (ELSE >)> )> ,NO-DATUM) ( > .TO>) ( .TO) ( <==? .THE-BOOL .TO>> ) (<==? .FROM T> ) (ELSE )> .TO) ( ) (ELSE )> ) (ELSE .XTRA>) (ELSE >)>)> .TO) (<==? .TO DONT-CARE> ,POP-STACK) (ELSE .FROM)>)>) (ELSE .TO)>> "Generate a TYPE? instruction" .TYP) (ELSE )> .TG>> )) ) (ELSE >>)> .TG> > )>> ) (ELSE >)> + `COMPERR>) (ELSE )> .RTMP> "Generate SETG/GVAL things" ) "AUX" TEM TG1 TG2) >)> ) (ELSE )>> .TG) (.DIR ) (ELSE .TG)>) (SIGN +) TEM) > )> ) (ELSE .ATM)> ,M$$GVAL = > ,RAT (`BRANCH-FALSE .SIGN .TG1)> .SIGN .TG1> >)> )> > >) (ELSE > ,RAT (`BRANCH-FALSE + >)> + .TG1> )> >> )> .VAL>) (ELSE FLUSHED>)> )>> "Generate CHTYPE" > ) (ELSE .TYP)> = .W>> >> >> >> >>> 0>>> .BR>) (ELSE >)>> >> > )) ) (ELSE )>> )) ) (ELSE )>> )) ) (ELSE )>> )) ) (ELSE )>> )) ) (ELSE )>> )) ) (ELSE )>> > > ) (ELSE )>> > > )) .TG (`TYPE .TY)>) (ELSE .TG>)>> )) .TG (`TYPE .TY)>) (ELSE .TG>)>> )) .TG (`TYPE .TY)>) (ELSE .TG>)>> )) .TG (`TYPE .TY)>) (ELSE .TG>)>> )) .TG (`TYPE .TY)>) (ELSE .TG>)>> .TG (`RECORD-TYPE .TPS)>> > > > > > > )) .TY>) (ELSE >)>> )) .TY>) (ELSE >)>> > > > )) (`RECORD-TYPE .TPS) .TY>) (ELSE (`RECORD-TYPE .TPS)>)>> <0? >> .ITM) (ELSE )>> .BR>> .BR>> .WHERE>