Prechádzať zdrojové kódy

lower L7: decouple the remaining runtime value ops

Drop DelayBegin/DelayEnd (AND RHS buffering), UStrLen/DecQ (UString
HIGH/LEN), CapQ/AbsQ/NotQ (CAP/ABS/NOT don't fold), the fwd-designator
FwdDesignator/FwdAddrOper and the method receiver's ThisBase; runtime
results are "@".  The constant-producing paths and all checks stay.
Design's HIGH/LEN string-literal NoteAddr calls are gone too.

Suite 204/204; FIXPOINT OK (3,378,639 bytes).
Eric Streit 3 dní pred
rodič
commit
f59b784893
2 zmenil súbory, kde vykonal 1269 pridanie a 1301 odobranie
  1. 10 26
      compiler/src/M2.atg
  2. 1259 1275
      compiler/src/M2.lst

+ 10 - 26
compiler/src/M2.atg

@@ -1010,7 +1010,7 @@ PRODUCTIONS
                                            (* bind the receiver: bare
                                            (* bind the receiver: bare
                                               field names resolve
                                               field names resolve
                                               against THIS *)
                                               against THIS *)
-                                           QbeGen.ThisBase(thisQ);
+                                            QbeGen.CopyOp("@", thisQ);
                                            QbeGen.PushWith(thisQ); .)
                                            QbeGen.PushWith(thisQ); .)
         Block<pn>                       (. AST.SetChild(astMethod, 1, astStmt);
         Block<pn>                       (. AST.SetChild(astMethod, 1, astStmt);
                                            QbeGen.PopWith;
                                            QbeGen.PopWith;
@@ -1960,10 +1960,8 @@ PRODUCTIONS
                                                k := SymTab.KindVar;
                                                k := SymTab.KindVar;
                                                r := SymTab.FwdVarRef(n, k,
                                                r := SymTab.FwdVarRef(n, k,
                                                  fref, t);
                                                  fref, t);
-                                               slot := QbeGen.FwdDesignator();
-                                               FwdVarNote(fref, slot);
-                                               fid := slot;
-                                               QbeGen.FwdAddrOper(fid, q);
+                                                FwdVarNote(fref, 0);
+                                                QbeGen.CopyOp("@", q);
                                                sfx := TRUE; fwd := TRUE
                                                sfx := TRUE; fwd := TRUE
                                              ELSE
                                              ELSE
                                                SemError(201);
                                                SemError(201);
@@ -2369,10 +2367,8 @@ PRODUCTIONS
                                              AST.NkUnary, AST.OpSub, astA);
                                              AST.NkUnary, AST.OpSub, astA);
                                            astA := astCur
                                            astA := astCur
                                          END; .)
                                          END; .)
-      { AddOp<op>                       (. IF op = SymTab.OpOr THEN
-                                             QbeGen.DelayBegin END; .)
-        Term<t2, q2> (. astB := astCur; IF op = SymTab.OpOr THEN
-                                             QbeGen.DelayEnd END; .)
+       { AddOp<op>
+         Term<t2, q2> (. astB := astCur; .)
         (. astOp := AST.OpAdd;
         (. astOp := AST.OpAdd;
            IF op = SymTab.OpSub THEN astOp := AST.OpSub
            IF op = SymTab.OpSub THEN astOp := AST.OpSub
            ELSIF op = SymTab.OpOr THEN astOp := AST.OpOr END;
            ELSIF op = SymTab.OpOr THEN astOp := AST.OpOr END;
@@ -2666,7 +2662,6 @@ PRODUCTIONS
                                             ELSE
                                             ELSE
                                               dt := SymTab.NewStr();
                                               dt := SymTab.NewStr();
                                               QbeGen.DeclStr(s, qd);
                                               QbeGen.DeclStr(s, qd);
-                                              QbeGen.NoteAddr(qd, qd)
                                             END;
                                             END;
                                             dk := -1;
                                             dk := -1;
                                             qn[0] := CHR(0); .)
                                             qn[0] := CHR(0); .)
@@ -2684,7 +2679,6 @@ PRODUCTIONS
                                               QbeGen.IntStr(ucp, qd)
                                               QbeGen.IntStr(ucp, qd)
                                             ELSE
                                             ELSE
                                               dt := SymTab.NewUStr();
                                               dt := SymTab.NewUStr();
-                                              QbeGen.NoteAddr(qd, qd)
                                             END;
                                             END;
                                             dk := -1;
                                             dk := -1;
                                             qn[0] := CHR(0); .) )
                                             qn[0] := CHR(0); .) )
@@ -2700,14 +2694,8 @@ PRODUCTIONS
   AND (SymTab.ClassOf(dt) = SymTab.ClUStr) THEN
   AND (SymTab.ClassOf(dt) = SymTab.ClUStr) THEN
                                              (* UString: the count is
                                              (* UString: the count is
                                                 the descriptor header *)
                                                 the descriptor header *)
-                                             IF isHigh THEN
-                                               QbeGen.UStrLen(qd, qr);
-                                               QbeGen.DecQ(qr)
-                                             ELSE
-                                               QbeGen.UStrLen(qd, qr)
-                                             END;
-                                             t := SymTab.IntType();
-                                             QbeGen.CopyOp(qr, q)
+                                              t := SymTab.IntType();
+                                              QbeGen.CopyOp("@", q)
                                            ELSIF (dt # SymTab.InvalidType)
                                            ELSIF (dt # SymTab.InvalidType)
   AND (SymTab.ClassOf(dt) = SymTab.ClUChar) THEN
   AND (SymTab.ClassOf(dt) = SymTab.ClUChar) THEN
                                              (* single UCHAR codepoint *)
                                              (* single UCHAR codepoint *)
@@ -2885,8 +2873,7 @@ PRODUCTIONS
    AST.SetChild(astNode, 0, AST.MakeLeaf(AST.NkIdent, "CAP"));
    AST.SetChild(astNode, 0, AST.MakeLeaf(AST.NkIdent, "CAP"));
    IF astCur # AST.NoNode THEN AST.SetChild(astNode, 1, astCur) END;
    IF astCur # AST.NoNode THEN AST.SetChild(astNode, 1, astCur) END;
    astCur := astNode; astIsLit := TRUE; .)
    astCur := astNode; astIsLit := TRUE; .)
-                                        (. QbeGen.CapQ(q, qa);
-                                           QbeGen.CopyOp(qa, q);
+                                         (. QbeGen.CopyOp("@", q);
                                            t := SymTab.CharType(); .)
                                            t := SymTab.CharType(); .)
     | "UCHR" "(" Expr<et, q> ")"
     | "UCHR" "(" Expr<et, q> ")"
     (. astNode := AST.MakeNode(AST.NkCall);
     (. astNode := AST.MakeNode(AST.NkCall);
@@ -2933,10 +2920,7 @@ PRODUCTIONS
  AND (SymTab.ClassOf(et) #
  AND (SymTab.ClassOf(et) #
                                                 SymTab.ClReal) THEN
                                                 SymTab.ClReal) THEN
                                              SemError(211)
                                              SemError(211)
-                                           ELSE QbeGen.AbsQ(q, qa,
-                                                  SymTab.ClassOf(et) =
-                                                    SymTab.ClReal);
-                                             QbeGen.CopyOp(qa, q)
+                                            ELSE QbeGen.CopyOp("@", q)
                                            END;
                                            END;
                                            t := et; .)
                                            t := et; .)
     | "VAL" "(" GetIdent<vn> (. astArg2 := AST.MakeLeaf(AST.NkIdent, vn); .) "," Expr<et, q> ")"
     | "VAL" "(" GetIdent<vn> (. astArg2 := AST.MakeLeaf(AST.NkIdent, vn); .) "," Expr<et, q> ")"
@@ -3022,7 +3006,7 @@ PRODUCTIONS
                                            ELSE SemError(212);
                                            ELSE SemError(212);
                                              t := SymTab.InvalidType END;
                                              t := SymTab.InvalidType END;
                                            IF t # SymTab.InvalidType THEN
                                            IF t # SymTab.InvalidType THEN
-                                             QbeGen.NotQ(q2, q)
+                                              QbeGen.CopyOp("@", q)
                                            ELSE QbeGen.CopyOp("0", q)
                                            ELSE QbeGen.CopyOp("0", q)
                                            END;
                                            END;
                                            astIsLit := TRUE;
                                            astIsLit := TRUE;

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1259 - 1275
compiler/src/M2.lst


Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov