X-Git-Url: https://jxself.org/git/?p=pdp10-muddle.git;a=blobdiff_plain;f=%3Cmdl.comp%3E%2Fcargen.mud.31;fp=%3Cmdl.comp%3E%2Fcargen.mud.31;h=97bfcf4ccf030c80b01041f077f6ec6a5d644532;hp=0000000000000000000000000000000000000000;hb=3395a5e4ef72d59cdb6832af7808dc9c2cf2a413;hpb=363cc6ead5cf4df20759797fe46b5dc29b3886e9 diff --git a//cargen.mud.31 b//cargen.mud.31 new file mode 100644 index 0000000..97bfcf4 --- /dev/null +++ b//cargen.mud.31 @@ -0,0 +1,1332 @@ + + + + + + + +" This file contains analyzers and code generators for arithmetic + SUBRs and predicates. For convenience many of the SUBRs that are +similar are combined into one analyzer/generator. For more info +on analyzers see SYMANA and on generators see CODGEN. +" + +"A type TRANS specifies to an inferior node what arithmetic transforms are +prohibited, permitted or desired. A transform consists of 3 main elements: +a NODE, an input, an output. The input and output are UVECTORS of 7 fixes: + +1) negative ok 0-no, 1-ok, 2-pref +2) + or - const ok 0-no, 1-ok, 2-pref +3) const for + or - +4) * or / const ok 0-no, 1-* ok, 2-* pref, 3-/ ok, 4-/ pref +5) hw ok 0-no, 1-ok, 2-pref +6) hw swapped also 0-no, 1-ok, 2-pref +" + + + +> + + (N NN) NODE (CD1 CD) FIX (L) LIST) + )) + >>> )> + >>> + > + >>>>> + > + >>> ,QUOTE-CODE> + <==? .CD1 ,QUOTE-CODE>> + >> + >> + + ) + (<==? .CD ,QUOTE-CODE> + + + ) + (> + + >> + + >> 2> <2 .TT>) + (ELSE T)> + > + + .TT> >> + .L>>> + <>) !.L)>)> + + + )>)> + >>> + > )> + .K> + .L> + +" Generate code for +,-,* and /. Note sexy AOS and SOS generator. Also +note bug causing result to be left in AC even if not wanted." + +) REG1 T1 + (ATYP + '![/ * - +!]>>) TT + (MODE 1) (TEM <1 .K>) SEGF SHFT TRIN + (COM <==? .ATYP 3>>) INA + (DONE <>) (NEGF <>) (ONO .NO-KILL) + (NO-KILL .NO-KILL)) + #DECL ((NOD TEM TT) NODE (K) (ATYP MODE) FIX + (REG1 REG) DATUM (WHERE COM) ANY (NO-KILL) ) + > + > + + .NO-KILL>> + FIX> ;"All this hair to try for AOS or SOS." + <==? .ATYP 2>> ;"+ or - only." + <==? 2> + <==? >> ,LVAL-CODE> + <==? >> ,QUOTE-CODE> + <==? 1> + >>> + <==? > ,SET-CODE> + <==? > + > + >>> + >>>> + >> + AC> .INA>> + AC> .INA>>)> + ,INACS <>> + + ! AC> + .REG> + (>)) + (<==? ANY-AC> + > + (>)) + (ELSE + <2 .WHERE>>> + ())> + ! + <> + <1 >>>>> + ,INACS .REG> + + 2> + DATUM>>) + (ELSE .REG)> + .AG>) + ( FIX> + <==? 2> + <==? > ,QUOTE-CODE>> + + <==? <1 .TRANSFORM>> + > + + > + 2> + <==? <3 .TRIN> + <- >>) + (ELSE >)>>>>> + 2 1> + 3 + <- >>) + (ELSE >)>>) + ( + > + 4> + <==? <5 .TRIN> >>>>> + 4 4> 5 >>) + (ELSE <>)>> + .WHERE> .AG>) + (>> ,SEG-CODE> + 2) (ELSE 0)> + >) + (<==? .ATYP 2> <- >>) + (ELSE 0)> + + 2) (ELSE 4)>) + (ELSE 0)> + >) (ELSE 1)> + 0 + 0>)) + #DECL ((TRANSFORM) ) + AC> + >> + ANY-AC>) + (ELSE .REG)>>> + + + > + .AG>)>> + <3 .TRANSFORM>>>)>)> + >> ,SEG-CODE> + >> + > ANY-AC>>> + >>>) + (ELSE + AC> + >> + ANY-AC>) + (ELSE .REG)>>> + FLOAT> >)> + ATOM> + >> + + >> ,SEG-CODE> + + >> + > ANY-AC>>) + (ELSE + > + > 2) + (ELSE 1)> + 0 + 0 + 0 + 0 + 0 + 0>> + )>) (COM .COM)) + #DECL ((N) (NXT REG) DATUM (MODE) FIX (NN) NODE + (TRANSFORM) ) + .NN .REG .NXT .MODE 0>> + ) + (ELSE + + >>> + > + >>> + + > FIX> + + >> + )>) + (<==? > FLOAT> + + >> + + )> + AC>> + AC>> + + + )> + > + + <==? .MODE 1> + <==? ,QUOTE-CODE> + >>> + ) + (ELSE + > + > + <- 3 .ATYP>) + (ELSE .ATYP)> + .REG + .NXT + > + + <==? >> + .MODE>>)>)>> + > + + <==? <1 .TRANSFORM> > + >>>> + 1 1>) + (ELSE >>)>)> + + > + +)) + #DECL ((D1 D2) DATUM) + <==? .ACQ >> + + + + > + + + >>> + )>> + >) + (ELSE )>)> + .D2> + + + .REG> + > + .SHFT) (ELSE <- .SHFT>)>>>> + +) (TG ) + (LOOP ) RAC) + #DECL ((N) NODE (ATYP SL MD) FIX (REG REG2) DATUM (RAC SAC) AC) + FIX> 1) (ELSE 2)>> + > + >> + AC> + > .REG>) + (ELSE > )> + + + >> + + > + + <==? .DEFLT 1> > + + > + + )> + <==? .ATYP 4>> + + + >) + (ELSE )>) + (ELSE + + + <==? .TYP 2> + >> + > + > + + + >> + + >)> + )> + + + + + + .MD> + + 1) (ELSE 2)>> + + ()>>) + (ELSE + [
]>>)>> + + + .TG>>) + (<==? .STYP LIST> + ()>> + .TG>>) + (ELSE + '[<2 (2)>]>> + .TG>>)>> + + + .TG>>) + (ELSE .TG>>)>> + + <==? .TYP 1>> + > + > + .SAC .STYP> + >> + + >> + ) + (ELSE + 0) (ELSE 1)> + ()>)>> + + + > + + .OFFS + .ADD>> + .OFFS .ADD>>) + (ELSE + .MD> .ATYP>> + >> + .OFFS .ADD>>)>> + + + 0) (ELSE 1)> + ()>>> + + + +" Do the actual arithmetic code generation here with all args set up." + + + AC> + > + ,LAST-AC> + <==? > 1>> + >>>>) + (> + .TT>>>) + ( AC> + + ,LAST-AC> + >>> + >>> + > 1>> + )>) + (ELSE )> + > + + >>>>> + >) + ( AC>> )> + ,ACPROT T> + > .MODE> .ATYP>> + .REG>> + + > >) + (ELSE + > + !>>)> + >> + ,ACPROT <>> + + > 1>>> + .REG2) (ELSE .REG)>>> + +>) (K ) REG + (MODE 1) REG1 SEGF (C 6>) TEM + (ONO .NO-KILL) (NO-KILL .ONO)) + #DECL ((NOD) NODE (MODE C) FIX (MAX?) ANY (REG) DATUM (K) + (NO-KILL) ) + .NO-KILL>> + .WHERE>> + >> ,SEG-CODE> + >> + > ANY-AC>>> + > >>>) + (ELSE + > + FLOAT> >)> + + ,SEG-CODE> + + >> + > ANY-AC>>) + (ELSE > )>)) + #DECL ((NXT REG) DATUM (N) NODE (MODE) FIX) + .N .REG .NXT .MODE 0>> + ) + (ELSE + + > FIX> + >> + )>) + (<==? > FLOAT> + >> + + )> + AC>> + AC>> + + + )> + AC> + .REG>)> + ;"Make sure in AC" + ,ACPROT T> + + > + > + > + ,ACPROT <>> + )>> + > + + > + +>) NUM (TRIN <>) + (ABSFLG <==? ABS>) TEM T2 (DONE <>)) + #DECL ((N K1) NODE (NUM) DATUM (TEM) (TRANSFORM) TRANS) + )) + #DECL ((TRANSFORM) ) + ,LNTH-CODE> + > + ) + (ELSE DONT-CARE)>>> + >>> + .ACT>)>> + + <==? <1 .TRANSFORM> > + > + >)> + + )) + #DECL ((W) LIST) + >) + ( > + AC> + <==? ANY-AC>>> + ) + (ELSE >)>>> + >>>> + AC> .NUM>> + + !>>) + (ELSE 1 1>)> + ) + ( AC>> + >>>> + AC> .NUM>> + + !>>) + (ELSE 1 1>)> + ) + (>>> + 1 1> + ) + (ELSE + > >>> + >) + (ELSE + > + >> + <==? >> + .TEM> + + > + !>> + .NUM> + )> + ANY-AC> + >) + ( AC> .TEM>)> + >)> + + ,ACLINK (.TEM !>)> + + .TEM> + + > + !>>)> + )>> + +> DONT-CARE>) NN + (N2 >> DONT-CARE>) TEM T1 TT + (ACE ,LAST-AC) (ACD ,LAST-AC-1)) + #DECL ((N) NODE (N1 N2) DATUM (ACE ACD TT T1) AC) + ,QUOTE-CODE> + >> + >> + .N1> + > + 1>>>) + (ELSE + >> ) + (> + >>>) + (> AC> + .ACE> + >>>> + ) + (ELSE 1>> <>>)>) + (ELSE + > + + + + )> + 1>>> ,ACPROT T> + + > + > + .N1> + + 1>>>> + )> .N1> + + > + >> + > + + >>)> + > + +> + +> + +) (A1 <1 .K>) (A2 <2 .K>) W1 W2 AC1) + #DECL ((N A1 A2) NODE (K) (W1 W2) DATUM (AC1) AC) + ,QUOTE-CODE> ;" LSH-ROT by fixed amount" + > + + .W1> + + .W1> + > >>) + (ELSE + ,SNODES> + ,SNODES>> + >> + > + >) + (ELSE + > + >)> + + .W1> + + > + + + > + + > + ( AC>>)>> + )> + > + +>) TEM1 (RT ) BR + TEM) + #DECL ((N NUM) NODE (TEM TEM1) DATUM (BR) ATOM) + + + ) + (<==? FIX> + >>> + .TEM> + + ) + (ELSE + > + >> + >>> + .TEM> + + > + >> .TEM1> + + )>> + +>) (RT ) TEM TEM1 BR) + #DECL ((N NUM) NODE (TEM TEM1) DATUM (BR) ATOM) + FIX> + + ) + (<==? .RT FLOAT> + >> + .TEM> + + ) + (ELSE + > + >> + >>> + .TEM> + + > + >> .TEM1> + + )>> + +) "AUX" TT T RTM) + #DECL ((DAT) DATUM (T) AC) + >) + (> + .TT>>>) + ( AC> + > 1>> + ) + (ELSE )> + > + + 1>> ,ACPROT T>> + + > + 1>> ,ACPROT <>> + 1>>>> + >> + )> + 131072>> + 172>> + 155>> + 1>> + + 1>>> + .DAT>> + +) "AUX" TEM TT (ACE ,LAST-AC) + (ACD ,LAST-AC-1) T1 NXTAC) + #DECL ((DAT) DATUM (ACE ACD TT TEM) AC) + >> ) + (> + >>>) + (> AC> + .ACE> + >>>>) + (ELSE + 1>> <>>)>) + (ELSE + > + + + + )> + 1>>> + ,ACPROT + T> + + > + > + .DAT> + + > + )> .DAT> + >> + )> + 256>> + >> + () -163>> + .DAT>> + +>>> + +>> + > -1) (ELSE 1)>>>> + + + +>> + +) + "AUX" TT + (W2 + DONT-CARE) + ( + >> + >) + (ELSE .WHERE)>) TAG2) + #DECL ((NOD) NODE (TT) DATUM) + NO-RETURN> + + ,NO-DATUM) + (> + > + .NOD + .WHERE + .NF + .TAG + .TF>) + (.NF + > + > + + > + ) + (> .TT .TF > + + .WHERE>> + + + .TT)>) + (ELSE + > + > + > + )>> + + ,LNTH-CODE> + <==? >>> LIST>>> + +) (BRANCH <>) (DIR <>) + "AUX" (REG ,NO-DATUM) (NN <1 >) + (TRANSFORM + >>)) + #DECL ((TRANSFORM) (NOD NN) NODE (REG) DATUM) + >> + + >>>>> + + 0) + (ELSE 1)>> + +] + TRANS>> + +) (NN >)) + #DECL ((TR) TRANS (N) FIX (X) ) + > >> >>> + >) + (<==? .NN L=?> >)>)> + >> >)> + >> >>)> + 2> >>) + (>> >>)> + >> + FIX>> + >> + .N> FIX>>)>)> + .N> + +) FLG) + #DECL ((TR) TRANS) + >> 2) (ELSE 0)> + >>> 2) (ELSE 0)> + ) (ELSE 0)> + 2>> 4) + (>>> 2) + (ELSE 0)> + ) (ELSE 1)> + >> 2) (ELSE 0)> + >> 2) (ELSE 0)>>> + + (N) NODE) + + ) + (<0? .NUM> <0-TEST1 .N .W .NF .BR .DI .REG .NEG>) + ( <==? .NUM -1>> + 1?> + <==? >>> FIX>>> + )> + <1?-TEST .N .W .NF .BR .DI .REG .NEG>) + (ELSE )>> + +) B2 (RW .WHERE) + (ARG <1 >) (SDIR .DIR) + (ATYP >) (LDAT <>) S TT) + #DECL ((NOD ARG) NODE (REG) DATUM (LDAT) (S) SYMTAB) + > + ,0-TST-CODE> >) + (ELSE + > + >)>)>)> + AC>> + .ATYP + <==? ,LVAL-CODE> + >> + > + <2 >> + 0>> + >>> + + ,ACRESIDUE (.S)>)> + >> + >> + > + + + ) + (ELSE + > + > + + + .WHERE> .RW>> + + + .RW)>) + (ELSE + >> + > + >> + > .LDAT> + + .WHERE> + + >> + + > .WHERE> + + )>> + +) + > AC> + >> + + .BR>>) + (ELSE + >> + >) (ELSE 0)> + !>> + )>> + + + + + +) (BRANCH <>) (DIR <>) + "AUX" (REG ,NO-DATUM) (NN <1 >) + (TRANSFORM + >>)) + #DECL ((NOD NN) NODE (REG) DATUM (TRANSFORM) ) + >> + + >>>>> + +) B2 (RW .WHERE) (K <1 >) + (SDIR .DIR) (NM <>) (ATYP >) + (RFLG ) (SDIR .DIR)) + #DECL ((NOD K) NODE (REG) DATUM) + ANY-AC>>> + >> + > + >> + > )> + > + + ) + (ELSE + + )> + ) + (ELSE + > + + .B2 + .SBR + .NEG + .NM>) + (ELSE + .B2 .NEG> + .B2 .SBR .NEG .NM>)> + + .WHERE> .RW>> + + + .RW)>) + (ELSE + > )> + > + >> + > + .SBR + .NEG + .NM>) + (ELSE + > .NEG> + )> + + .WHERE> + + >> + + > .WHERE> + + )>> + + + + + + (TYP BR) ATOM) + FIX> + >> + >> + > + > + >> + ) + (ELSE + .REG> + + >> + > + .BR>>)>) + (ELSE + + > + >> + )>> + + `CAME ) (ELSE `CAMN )> + > + >> + )>> + +)) + #DECL ((DAT) DATUM (LABGOOD) ATOM) + >> + >> + >> + + + + > + +) (BRANCH <>) (DIR <>) + "AUX" (K <1 >) (K2 <2 >) REGT REGT2 + (S >) TRANSFORM ATYP ATYP2 B2 + (SDIR .DIR) (RW .WHERE) TRANS1 (FLS <==? .RW FLUSHED>) + TEM (ONO .NO-KILL) (NO-KILL .ONO) + "ACT" TA) + #DECL ((NOD K K2) NODE (REGT) DATUM (TRANSFORM) + (TRANS1) TRANS (NO-KILL) ) + FLUSHED) + (ELSE )>> + ,QUOTE-CODE> + ,SNODES>> + > + ,SNODES>>> + ,LVAL-CODE> + >> 2> <2 .TEM>) + (ELSE T)> + > + + .TEM> >> + .NO-KILL>>> + <>) !.NO-KILL)>)> + + >> + >>)> + >> + >> + ANY-AC>> + ,QUOTE-CODE> + >> + DONT-CARE) + (.ATYP2 ) + (ELSE )>> + ,QUOTE-CODE> + <==? .ATYP2 FLOAT>>) + (ELSE + > .S>> + 6 1> + 7 0>)> + > + + + >)> + AC> + > + AC> + >> + + + + + + + )> + + + ) + (ELSE )>) + (ELSE >)>) + (ELSE + + <0? > + <1? >> + > .S>>)> + + 2 1> 3 >>)> + ) + (ELSE + > + + )> + + > .TRANSFORM>) + (ELSE )> + >>>>> + .TA>)> + + + + >>> + >> + > + + .ATYP2 + .ATYP + .REGT2 + .REGT + )> + >)>> + + .WHERE> .RW>> + + + .RW)>) + (ELSE + > + + .ATYP2 + .ATYP + .REGT2 + .REGT + .NOTF + >> + .WHERE> + + >> + + > .WHERE> + + )>> + +) B2 + (SBR )) + #DECL ((NOD) NODE (REG) DATUM (NUM) ) + FLUSHED) + (ELSE )>> + + >)> + >> + > + + > + + .REG + )> + >)>> + + .WHERE> .RW>> + + + .RW)>) + (ELSE + > + >> + >)> + + > + + .REG + .NOTF + >> + .WHERE> + + >> + + > .WHERE> + + )>> + + (SB T1 T2 BR) ATOM) + >> + ) + (<==? FIX> + >> + ) + (ELSE + > + )> + AC> > + ,ACPROT T> + >> + > + > + + + > + +>>> + + + + + +