"AN SCL IS A TEMPORARY. IT IS REPLACED BY A FIX WHICH IS A OFFSET OFF THE BASE OF THE TEMPORARIES IN THE CODE UPDATE PASS" "A PFRAME IS A PSEUDO-FRAME GENERATED BY A PROG/REPEAT/MAPF/MAPR/FUNCTION. IT CONTAINS INFORMATION FOR CUP'S USE." ATOM LIST LIST FIX LIST>> "A TEMPB DESCRIBES A TEMPORARY" SCL LIST FIX FIX FIX LIST>> "BEGIN-FRAME STARTS A FRAME. IT TAKES 3 ARGUMENTS: 1) ATOM LATER SETG'd TO LENGTH OF TEMPORARY BLOCK 2) FLAG INDICATING WHETHER THE FRAME IS ACTIVATED 3) FLAG INDICATING WHETHER PRE-ALLOCATION IS TO BEGIN" >> "END-FRAME ENDS A FRAME." >> "CREATE-TMP CREATES A TEMPORARY AND RETURNS THE ID OF IT" > SCL> .TYP] TOKEN>> > >> >> \ (SNO) ) ()> > "PASS:1 SETS UP THE INITIAL MODEL FOR CUP. IT ALSO DETERMINES WHICH VARIABLES ARE TO BE KEPT BY USING A MARK-BIT IN THE TEMPORARY DESCRIPTORS." )) #DECL ((VALUE) PFRAME (CPTR COD) LIST (CFRAM) ) > > ) ( > ,STORE:TMP> <==? .TOKCOD ,STORE:VAR> <==? .TOKCOD ,STORE:TVAR>>> >)> ) (ELSE <3 .INST> <4 .INST> (()) () 0 ()] PFRAME>> )>) ()>)>) (,END:FRAME ) (,STORE:VAR .CPTR !.VARLST)>) (,KILL:STORE >) (,CREATE:TEMP () 0 .SNO 0 <3 .INST> ()] TEMPB>) >>) (,EMIT:PRE >) (,STORE:TMP > <1 .MODEL>>) ()>> ,STORE-TEMP (.CPTR .SNO !)>) (,STORE:TVAR > <1 .MODEL>>> > ) ( FIX>>)> )>) (ELSE )> .CPTR !.VARLST)>) DEFAULT ()>) (> >> )> >) ()>) ()>)> >> )>> .CFRAM> ) (>> TOKEN> <==? <1 .VAR> ,STORE:VAR>> 1 <6 .VAR> <4 .VAR> <5 .VAR>>>)> >>> ) > > 1 '>)>> > )>> .SC>) ( .SC)>> "FIND-TMP LOOKS FOR A TEMPORARY. IF IT DOESN'T FIND IT AND ERR IS T IT CAUSES AN ERROR" ) (<==? .ID> )>> >>) ( > )>> >)>> \ "THIS IS PASS2 OF THE VARIABLE ALLOCATION PROCESS. DURING THIS PHASE VARIABLES AND TEMPORARIES ARE ASSIGNED SLOTS ON THE STACK AND THE LENGTH OF THE BTP'S BECOMES KNOWN. NO CODE UPDATE IS DONE DURING THIS PHASE." ) >> "THIS ROUTINE ACTUALLY DOES THE ALLOCATION OF VARIBLES. IF IT MUST DO PREALLOCATION IT CALLS PRE-ALLOC-VAR." ) (ELSE >>> 2>> > >)>> "THIS ROUTINE TAKES A LIST OF TEMPORARIES AND ALLOCATES THERE SPACE ON THE STACK. IT TRIES TO KEEP TEMPORARIES OF THE SAME TYPE TOGETHER THOUGH ITS MAIN GOAL IS TO MINIMIZE THE NUMBER OF TEMPORARIES. IT RETURNS A LIST OF THE TYPES OF THE TEMPORARIES. A FALSE MEANS THAT THE TYPE CANNOT BE PRE-ALLOCATED." ) >> TEMPB>) <==? <1 .TMPLST>> >> )>> .NVRLST>) ( TEMPB>) > > )>> .NVRLST>) (ELSE .TMP) !.NVRLST)> >)>)>> .VARLST> >> ) (SLO )) #DECL ((SLO) FIX (VAR CMPVAR) TEMPB) > > >) (> > >)>> "THIS ROUTINE DOES PRE-ALLOCATION. THE TOP FRAME GETS THE STRUCTURE AND THE OTHER FRAMES ARE IGNORED (THEIR TEMPS ARE ALLOCATED IN THE FIRST FRAME)." > > 2>> > )) #DECL ((FRM) PFRAME (SLOTS) LIST) > .SLOTS) (> !.SLOTS)> >> > .SLOTS)>> \ "PASS:3 OF CUP FIXES UP THE REFERENCES TO TEMPORARIES, FIXES UP THE CODE AND ADDS THE PSEUDO-SETG'S." ) (NPS ()) (PS ())) #DECL ((NPS) (MODEL) (COD) LIST (PS) ) T> )> <2 .PS>>> !.NPS)> >> .NPS>> ) "AUX" LX) #DECL ((LX) LIST (FRM) PFRAME (PS) LIST (ADDS REMOVES) LIST) > >)> >>> ) .PS>> )>>)> ) (SC ) (LADJ )) #DECL ((SC) SCL (NUM) FIX (LADJ) LIST (VAR) TEMPB) ) > .NUM>)>> .LADJ> ) (HT ) XX) )> >> .HT>> >> >> ,STORE:TMP> <3 .XX> <4 .XX> <5 .XX>>>) (<==? <1 .XX> ,STORE:TVAR> <6 .XX> <4 .XX> <5 .XX>>>) ()> <+ 2> 1>>> 1 .XX>)>) ( 1 '>)> >>> >> > )>>> .LX>)>> .SC> )>> .FRM>)>> .FRM>) (<==? .FRM .SC>)>> \ )) > > > >> )>> > (TOKEN-TABLE) > >> > .X>> ,TOKEN-MAX> >>) (ELSE >)> > >> ) > >) (ELSE > )>>> .REMOVES> >> .QCOD> )> > > >> \ "THIS ROUTINE CALLED AT ASSEMBLY TIME ALLOCATES SLOTS FOR THE TEMPORARIES." (FXI) FIX) >) (ELSE >)) .SPL>> ) (> .SPL>> > ) .SPL>>) (>)> >>)> > ()) ( >) (( ))>> > )) (ELSE > (> )) ( (> )) (ELSE ( ))>)>) SPLICE>> > )) #SPLICE ()) (>>) SPLICE>)>> "FUNCTION TO EXPAND THE MACROS IN THE SOURCE GENERATED BY THE COMPILER. SHOULD BE CALLED AFTER CUP." ) (TC .CODE) TC1) #DECL ((CODE CP TC) LIST) > FORM> > ATOM> >) (<==? OBLIST> OP!-PACKAGE>) (<==? .FRST TITLE>) ( > SPLICE> >> ) (ELSE 1>> LIST>> > > )>)>)>) (> ) ELE) #DECL ((PTR RPTR) (NUM) FIX) )> > FORM> -> <==? <1 .ELE> GVAL>>> >)> > >> )> > >> > 1>> (.NUM)>)>>)>)> >> )> >> .CODE> ) .AD) (ELSE 1>> .AD> .OB)>>