X-Git-Url: https://jxself.org/git/?p=pdp10-muddle.git;a=blobdiff_plain;f=mim%2Fdevelopment%2Fmim%2Fmimc%2Fnotgen.mud;fp=mim%2Fdevelopment%2Fmim%2Fmimc%2Fnotgen.mud;h=337ed4eb2743c7d114737de15efdf215af96244b;hp=0000000000000000000000000000000000000000;hb=d73ace3f3292e320b461b8fcd2e9f5dc5d9684d7;hpb=d530283ea60fb0ddcc28e9c5bd072456afe06e07 diff --git a/mim/development/mim/mimc/notgen.mud b/mim/development/mim/mimc/notgen.mud new file mode 100644 index 0000000..337ed4e --- /dev/null +++ b/mim/development/mim/mimc/notgen.mud @@ -0,0 +1,858 @@ + + + + + + + +" 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 + )>)>)> + + + > + +