X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=%3Cmdl.comp%3E%2Fnotgen.mud.119;fp=%3Cmdl.comp%3E%2Fnotgen.mud.119;h=121989c07d85f5321fe0bad7e6bd1c3c7ddeb847;hb=3395a5e4ef72d59cdb6832af7808dc9c2cf2a413;hp=0000000000000000000000000000000000000000;hpb=363cc6ead5cf4df20759797fe46b5dc29b3886e9;p=pdp10-muddle.git diff --git a//notgen.mud.119 b//notgen.mud.119 new file mode 100644 index 0000000..121989c --- /dev/null +++ b//notgen.mud.119 @@ -0,0 +1,330 @@ + + + + + + + +" 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) + "AUX" (P <1 >) (RW .WHERE) + (PF >) T1 T2 TT (FLG <>)) + #DECL ((NOD P) NODE (TT) DATUM) + > + > + + > + .P + FLUSHED) (ELSE .WHERE)> + .NOTF + .BRANCH + .DIR>>) + (> + >> + > + > + >) + (.BRANCH + > + > + > + > + + .WHERE>> + + ) + (<==? .RW FLUSHED> >) + (> FALSE>> + FALSE>>> + + > .WHERE>>) + (.PF + > + > + > + .P + FLUSHED + .NOTF + .T1 + .DIR> + > .WHERE> + + + + .WHERE> + ) + (ELSE + > + > + > + > + > + + .WHERE> + + + + > .WHERE> + )> + > + +>> + +" Generate code for ==?. If types are the same then just compare values, +otherwise generate a full comparison." + +) (BRANCH <>) (DIR <>) + "AUX" (K ) REG REG2 B2 T2OK T2 T1 + (T1OK >>) + (TYPSAM + >>>> + .T1OK>) (RW .WHERE) (SDIR .DIR) + (FLS <==? .RW FLUSHED>) INA) + #DECL ((NOD) NODE (K) ) + ,N==?> >)> + + .T1OK + .T2OK + + " " + .NOD>> + >> ,QUOTE-CODE> + > + >> ,QUOTE-CODE> + ,SNODES> + ,LVAL-CODE> + ,LVAL-CODE> + >> + AC>>>>> + > + + + + )> + > + ) + (ELSE )>> + + >> + + <2 .K> + .T1OK + .T2OK + )> + .TYPSAM + >)>> + + .WHERE> .RW>> + + + .RW)>) + (ELSE + > + + <2 .K> + .T1OK + .T2OK + .NOTF + .TYPSAM + .BRANCH> + .WHERE> + + >> + + > .WHERE> + + )>> + +) AC R1 R2) + #DECL ((N1 N2) NODE (R1 R2) DATUM (AC) AC) + > + > + > + AC>) + ( AC> + + + + + + )> + + AC> + > ,ACPROT T>> + ,ACPROT T> + + > + >) + (ELSE + >>) + (.T1 + >>) + (ELSE + >> + >>> + !>>)> + > > + ) + (.T2
) + (ELSE ())>>> + >>)> + + + + >>> + +" Generate TYPE? code for all various cases." + +) (BRANCH <>) (DIR <>) + "AUX" B2 REG (RW .WHERE) (K ) (SDIR .DIR) + (FLS <==? .RW FLUSHED>) B3 (TEST? T)) + #DECL ((NOD) NODE (K) (REG) DATUM + (WHERE BRANCH B2 B3) ANY) + FALSE> + + ) + ( FALSE>> + + )> + ;"Type of false indicates always true or false" + .FLS> FLUSHED) (ELSE DONT-CARE)>>> + >> + > + > + >> <==? <1 .TEST?> 2>>> + >>)> + + ;"In a COND, OR or AND?" + >> >> + > + >)> + 2>> + <==? <1 .TEST?> 1>>> + )> + > + ) + (ELSE + <1 .K>> + > + >)> + >> + .TEST?> + + 2>> + + <==? <1 .TEST?> 1>>>>> + + )> + )>)>>) + ( >) + ( >>> + > + > + > + > + ) (ELSE .DIR)> + <1 .K>> + ) + (ELSE + <1 .K>> + > + >> + .DIR> + >> + )>)> + .B2>>> + + + .WHERE> + + ) + (ELSE )>) + (ELSE + 2>> + <==? <1 .TEST?> 1>>> + .WHERE> + )>) + (ELSE 2> .WHERE>)>)>) + (ELSE + > + > + > + 2> <==? <1 .TEST?> 2>>> + + )) + >>> + .TY> + >>)> + > .REG> + > + + > + + ) + (ELSE + >> + + > .WHERE> + )>) + (ELSE + + + )>> + .K>) + (ELSE + 2>> + <==? <1 .TEST?> 1>>> + >>> .WHERE> + )>) + (ELSE >>> .WHERE>)>)>)> + > + + + >>>> + + + \ No newline at end of file