" Generate NOT code. This is done in a variety of ways. 1) If NOTs arg is a predicate itself and this is a predicate usage (flagged by BRANCH arg), just pass through setting the NOTF arg. 2) If NOTs arg is a predicate but a value is needed, set up a predicate like situation and return NOT of the normal value. 3) Else just compile and complement result." ) (BRANCH <>) (DIR T) (SETF <>) "AUX" (P <1 >) (RW .WHERE) (PF ) T1 T2 TT (FLG <>)) #DECL ((NOD P) NODE) > FLUSHED) (ELSE .WHERE)> .NOTF .BRANCH .DIR .SETF>>) (> >> > >) (.BRANCH > > > .WHERE>> > .WHERE>>)>) (<==? .RW FLUSHED> >) (> FALSE>> FALSE>>> > .WHERE>>) (.PF > > > >>)> > .WHERE> .WHERE> ) (ELSE > > > > > >>)> .WHERE> > .WHERE> )> > 0>> > 0> > ,CALL-CODE> >> 2> > <==? > `SYSOP>> <=? >> "STRING-EQUAL?">>> <==? .W FLUSHED> >>> <==? >>> 1>> <==? >>>> ,QUOTE-CODE> > <==? >> ,MFCN-CODE> >> FALSE> >> > ,SEGMENT-CODE> <==? .NT ,SEG-CODE>> )>> >>>> > >> <==? .W FLUSHED> > > ,STACK-CODE> <==? TUPLE>> <==? .NT ,ISTRUC2-CODE>> <==? ITUPLE>>>>> )>> >>>>> " Generate code for ==?. If types are the same then just compare values, otherwise generate a full comparison." ) (BRANCH <>) (DIR <>) (SETF <>) "AUX" (K ) REG REG2 B2 T2OK T2 T1 (TY1 >) (TY2 >) (T1OK ) (TYPSAM >> <==? >> .T1OK>) (RW .WHERE) (SDIR .DIR) (FLS <==? .RW FLUSHED>) INA) #DECL ((NOD) NODE (K) ) >> >> >> )> ,N==?> >)> > .NOD>> >> ,QUOTE-CODE> > >> ,QUOTE-CODE> ,SNODES> ,LVAL-CODE>>> > )> >> > .WHERE>>)> <2 .K> .T1OK .T2OK )> .TYPSAM >)>> .WHERE> .RW>> .RW)>) (ELSE > <2 .K> .T1OK .T2OK .NOTF .TYPSAM .BRANCH> >>)> .WHERE> >> > .WHERE> )>> ) R1 R2) #DECL ((N1 N2) NODE) > > ) (ELSE )> > > <==? <1 .TY1> OR>> )>> >) ( > <==? <1 .TY2> OR>> )>> >) ( >> > >> PRIMTYPE> > FORM SEGMENT> > <==? <1 .TEM> PRIMTYPE> >> <2 .TY1>> T) (ELSE <>)>) (ELSE .TY2>)>) (<==? .TY1 .TY2> <>) (> > <==? >> T) (ELSE <>)>> " Generate TYPE? code for all various cases." ) (BRANCH <>) (DIR <>) (SETF <>) "AUX" B2 REG (RW .WHERE) (K ) (SDIR .DIR) (FLS <==? .RW FLUSHED>) B3 (TEST? T) (FIRST T)) #DECL ((NOD) NODE (K) (WHERE BRANCH B2 B3) ANY) FALSE> ) ( FALSE>> )> DONT-CARE>> >> > >> >> > > > .BRANCH .DIR>)> .DIR <==? <1 .TEST?> 2>> <==? <1 .TEST?> 1>>> )> > ) (ELSE > T> > T>)> >> .TEST?> 2>> <==? <1 .TEST?> 1>>>>> )> )>)>>) ( >) ( >> >> > > >>)> > .WHERE>>)> > > > .B2 ) (ELSE .DIR)>> ) (ELSE > ) (ELSE .DIR)> .B2) (ELSE .B3)> T> > ) (ELSE .DIR)> .B2) (ELSE .B3)> T> >> )> )> )>)>> >>)> .WHERE>> ) (ELSE )>) (ELSE 2>> <==? <1 .TEST?> 1>>> .WHERE>> )>) (ELSE 2> .WHERE>>)>)>) (ELSE > <==? 1> 1>> ) (ELSE >>)>)> > 2> <==? <1 .TEST?> 2>>> > .WHERE>>>)> )) >>> .DIR >>> >) (ELSE .BRANCH)> <>>)> > .WHERE>> ) (ELSE >)> > ) ( >> > .WHERE>> )> >) (ELSE )>> .K>) (ELSE 2>> <==? <1 .TEST?> 1>>> >>> .WHERE>> )>) (ELSE >>> .WHERE>>)>)>)> > (,CALL-CODE ) (,COND-CODE ) (,OR-CODE ) (,AND-CODE ) (,0-TST-CODE <0-TEST .N .W .NF .B .D .SF>) (,NOT-CODE ) (,1?-CODE <1?-GEN .N .W .NF .B .D .SF>) (,TEST-CODE ) (,EQ-CODE <==-GEN .N .W .NF .B .D .SF>) (,TY?-CODE ) (,MT-CODE ) (,MONAD-CODE ) (,ASSIGNED?-CODE ) (,GET-CODE ) (,GET2-CODE ) (,MEMQ-CODE ) (,LENGTH?-CODE ) (,GASSIGNED?-CODE ) (,VALID-CODE ) (,=?-STRING-CODE <=?-STRING-GEN .N .W .NF .B .D .SF>) (,SET-CODE ) (,MAP-CODE ) (,PROG-CODE ) DEFAULT ()>> ) (SETF <>) "AUX" (W2 DONT-CARE) (ELSE .WHERE)>) TT TAG2) #DECL ((NOD) NODE) NO-RETURN> ,NO-DATUM) ( ) (.NF > >) (ELSE > .TT .TF > .WHERE>> .TT)>) (ELSE > > )>> ) (BRANCH <>) (DIR <>) (SETF <>) "AUX" (NN <1 >) (SDIR .DIR) (RW .W) (FLS <==? .RW FLUSHED>) B2 B3 DATA) #DECL ((N NN) NODE) >)> > ,NO-DATUM) (>) ( >> >> > > ) (ELSE .DIR)>> >>)> .W>> > .W>)>) (ELSE )> ) (ELSE > > > 1>> ) (ELSE >>)>)> > .W>>)> .DIR .W> > .W> )> )>> >>) (RW .W)) > 1>> ) (ELSE >>)>)> > ) (BRANCH <>) (DIR <>) (SETF <>) "AUX" (N1 <1 >) (N2 <2 >) (SDIR .DIR) (RW .W) (FLS <==? .RW FLUSHED>) B2 B3 L1 L2) #DECL ((N N1 N2) NODE) N=?> >)> >)> )> >)> > >>)>)> .W> .RW>> > .RW>)> .RW)>) (<==? STRCOMP> <> STRCOMP .W>) (ELSE > > >>)> .W> >> > .W> )>> >)> > > > STRING>> <>>) ( > STRING>> <>>)> .D1>> .D2>>)> "STRCOMP") (ELSE "STRING-EQUAL?")>>> > >) ( .W) (ELSE .W)>>) (ELSE .BR>)> 1>>> >>>)> 1>>> >>>)> >> >>) (ELSE ,QUOTE-CODE> STRING>>) (ELSE >> > .L2)> <> >)> > > VALUE LENGTH) ( VALUE LENGTH) ( VALUE) ! (( VALUE))) (ELSE ())>> >> > )> > '(`TYPE FIX)>)> >)> >> >> )> )> )> .W)>> 1>> >>>)> > T> )> .D> ) (RW .W) (CARE <==? .NM GBIND>>>)) #DECL ((N) NODE) >>> > 1) (<==? .NM LBIND> 2) (<==? .NM SPNAME> 3) (ELSE 4)> = >>) ( .CARE> > T>>>) (ELSE .W)> '(`RECORD-TYPE ATOM) !> + `COMPERR>)> > ) (K ) E (RT >)) #DECL ((N) NODE (K) ) >> >> > 1) (ELSE 3)> = >) (<==? .W DONT-CARE> >>) (ELSE .W)>>) (ELSE >> >)> .W> ) (NN <1 >) (ST ) (RW .W)) #DECL ((N) NODE) > > >) ( )> ) (ELSE )>)> .W) (ELSE >) (ELSE >)> >>> >)> > ) (ELSE )>)> >)> .W)>> ) (PT >) (LN ) (OVERLAP T) (DIR <>) TMP1 TMP2 (RSTN <>) (LNTN <>) (STRN <1 .K>) (RESN <>) AMT NT (THE-SYM <>) RSTK NN (SRC-REST 0) (DEST-REST 0) RSTINS LNTINS) #DECL ((STRN NN N) NODE (LN) FIX (RSTK K) (RSTN LNTN RESN) (SRC-REST DEST-REST) FIX) > > >)>)>)> ,QUOTE-CODE>> .SRC-REST>>)> > ,LVAL-CODE> >> <==? >>>> ,QUOTE-CODE> .SRC-REST>> <==? >> ,LVAL-CODE> >>> .RSTN <==? ,QUOTE-CODE> .LNTN FIX>> >> .RESN > ,LVAL-CODE> <==? .THE-SYM>> <==? >>>> ,QUOTE-CODE> > <==? >> ,LVAL-CODE> <==? .THE-SYM>>>> ) ( ) ; "taa 5/26/88: Swapped the two directions, for the sake of mnemonicity. When SRC-REST is greater than DEST-REST, we can use what's conventionally known as a FORWARD BLT, since the first word transferred is not in the area being read, etc. When SRC-REST is LESS than DEST-REST, we're potentially transferring into the area that will later be read, and therefore need to do it backwards. MIMOC20 in fact used to do backwards blts with dir FORWARD, and vice versa..." (ELSE )>) ( > )> .NN> )>> >>> >>) (ELSE >>>)> ) (<==? .PT UVECTOR> ) (<==? .PT STRING> ) (ELSE )> ,QUOTE-CODE>> > 1> .THE-SYM) (ELSE >)>> ) (> 1> .THE-SYM) (ELSE >)>>)> >) (ELSE >>)> > .W) (ELSE DONT-CARE)>>> <==? .PT UVECTOR>> ) (ELSE )>)>) (ELSE .TMP2 = > ) (ELSE >)> (`TYPE .PT)> <==? .PT UVECTOR>> ) (ELSE )>)>)> >