Browse Source

* bug with mul. of dwords fixed, reported by Alexander Stohr
* some changes to compile with TP
+ small enhancements for the new code generator

florian 26 years ago
parent
commit
77f7afffa9
6 changed files with 65 additions and 32 deletions
  1. 8 3
      compiler/cg386add.pas
  2. 9 2
      compiler/cg386cnv.pas
  3. 6 11
      compiler/i386.pas
  4. 18 8
      compiler/new/convtree.pas
  5. 18 6
      compiler/new/tree.pas
  6. 6 2
      compiler/pp.pas

+ 8 - 3
compiler/cg386add.pas

@@ -798,10 +798,10 @@ implementation
                        emitloadord2reg(p^.right^.location,u32bitdef,R_EAX,true);
                        exprasmlist^.concat(new(pai386,op_reg(A_MUL,S_L,R_EDI)));
                        emit_reg_reg(A_MOV,S_L,R_EAX,p^.location.register);
-                       if popeax then
-                        exprasmlist^.concat(new(pai386,op_reg(A_POP,S_L,R_EAX)));
                        if popedx then
                         exprasmlist^.concat(new(pai386,op_reg(A_POP,S_L,R_EDX)));
+                       if popeax then
+                        exprasmlist^.concat(new(pai386,op_reg(A_POP,S_L,R_EAX)));
                        SetResultLocation(false,true,p);
                        exit;
                      end;
@@ -1737,7 +1737,12 @@ implementation
 end.
 {
   $Log$
-  Revision 1.38  1999-01-05 17:03:36  jonas
+  Revision 1.39  1999-01-19 10:18:58  florian
+    * bug with mul. of dwords fixed, reported by Alexander Stohr
+    * some changes to compile with TP
+    + small enhancements for the new code generator
+
+  Revision 1.38  1999/01/05 17:03:36  jonas
     * don't output inc/dec if cs_check_overflow is on, because inc/dec don't change
       the carry flag
 

+ 9 - 2
compiler/cg386cnv.pas

@@ -545,7 +545,6 @@ implementation
                    begin
                       clear_location(pto^.location);
                       pto^.location.loc:=LOC_REFERENCE;
-                      clear_reference(pto^.location.reference);
                       gettempofsizereference(pto^.resulttype^.size,pto^.location.reference);
                       ltemptoremove^.concat(new(ptemptodestroy,init(pto^.location.reference,pto^.resulttype)));
                       exprasmlist^.concat(new(pai386,op_const_ref(A_MOV,S_L,0,newreference(pto^.location.reference))));
@@ -1345,6 +1344,9 @@ implementation
          { the helper routines need access to the release list }
          ltemptoremove:=oldrl;
 
+         if not(assigned(ltemptoremove)) then
+           internalerror(18011);
+
          { this isn't good coding, I think tc_bool_2_int, shouldn't be }
          { type conversion (FK)                                        }
 
@@ -1476,7 +1478,12 @@ implementation
 end.
 {
   $Log$
-  Revision 1.43  1998-12-22 13:10:59  florian
+  Revision 1.44  1999-01-19 10:18:59  florian
+    * bug with mul. of dwords fixed, reported by Alexander Stohr
+    * some changes to compile with TP
+    + small enhancements for the new code generator
+
+  Revision 1.43  1998/12/22 13:10:59  florian
     * memory leaks for ansistring type casts fixed
 
   Revision 1.42  1998/12/19 00:23:42  florian

+ 6 - 11
compiler/i386.pas

@@ -1328,15 +1328,6 @@ unit i386;
     procedure reset_reference(var ref : treference);
 
       begin
-{$ifdef ver0_6}
-         ref.index:=R_NO;
-         ref.base:=R_NO;
-         ref.segment:=R_DEFAULT_SEG;
-         ref.offset:=0;
-         ref.scalefactor:=1;
-         ref.isintvalue:=false;
-         ref.symbol:=nil;
-{$else}
          with ref do
            begin
               index:=R_NO;
@@ -1347,7 +1338,6 @@ unit i386;
               isintvalue:=false;
               symbol:=nil;
            end;
-{$endif}
       end;
 
       function new_reference(base : tregister;offset : longint) : preference;
@@ -1962,7 +1952,12 @@ Begin
 end.
 {
   $Log$
-  Revision 1.28  1999-01-13 11:34:06  florian
+  Revision 1.29  1999-01-19 10:19:02  florian
+    * bug with mul. of dwords fixed, reported by Alexander Stohr
+    * some changes to compile with TP
+    + small enhancements for the new code generator
+
+  Revision 1.28  1999/01/13 11:34:06  florian
     * unified i386.pas for the old and new code generator
 
   Revision 1.27  1999/01/10 15:37:53  peter

+ 18 - 8
compiler/new/convtree.pas

@@ -42,19 +42,29 @@ unit convtree;
          node : pnode;
 
       begin
-         case p^.treetype of
-           blockn:
-             node:=new(pblocknode,init);
-           else internalerror(13751);
-         end;
-         disposetree(p);
-         convtree2node:=node;
+         if assigned(p) then
+           begin
+              case p^.treetype of
+                blockn:
+                  node:=new(pblocknode,init(convtree2node(p^.left)));
+                else internalerror(13751);
+              end;
+              disposetree(p);
+              convtree2node:=node;
+           end
+         else
+           convtree2node:=nil;
       end;
 
 end.
 {
   $Log$
-  Revision 1.1  1999-01-13 22:52:37  florian
+  Revision 1.2  1999-01-19 10:19:04  florian
+    * bug with mul. of dwords fixed, reported by Alexander Stohr
+    * some changes to compile with TP
+    + small enhancements for the new code generator
+
+  Revision 1.1  1999/01/13 22:52:37  florian
     + YES, finally the new code generator is compilable, but it doesn't run yet :(
 
 }

+ 18 - 6
compiler/new/tree.pas

@@ -195,7 +195,7 @@ unit tree;
           procedure pass_1;
           { dermines the resulttype of the node }
           procedure det_resulttype;virtual;
-          { dermines the number of necessary temp. locations to evalute
+          { dermines the number of necessary temp. locations to evaluate
             the node }
           procedure det_temp;virtual;
           procedure secondpass;virtual;
@@ -208,7 +208,6 @@ unit tree;
        end;
 
        ploadnode = ^tloadnode;
-
        tloadnode = object(tnode)
           symtableentry : psym;
           symtable : psymtable;
@@ -282,6 +281,7 @@ unit tree;
           tunarynode = object(tnode)
              left : pnode;
              procedure dowrite;virtual;
+            constructor init(l : pnode);
           end;
 
           pbinarynode = ^tbinarynode;
@@ -298,7 +298,7 @@ unit tree;
 
           pblocknode = ^tblocknode;
           tblocknode = object(tunarynode)
-            constructor init;
+            constructor init(l : pnode);
           end;
 
 {$ifdef dummy}
@@ -605,6 +605,13 @@ unit tree;
                                  TUNARYNODE
  ****************************************************************************}
 
+    constructor tunarynode.init(l : pnode);
+
+      begin
+         inherited init;
+         left:=l;
+      end;
+
     procedure tunarynode.dowrite;
 
       begin
@@ -619,10 +626,10 @@ unit tree;
                                  TBLOCKNODE
  ****************************************************************************}
 
-    constructor tblocknode.init;
+    constructor tblocknode.init(l : pnode);
 
       begin
-         inherited init;
+         inherited init(l);
          treetype:=blockn;
       end;
 
@@ -1918,7 +1925,12 @@ unit tree;
 end.
 {
   $Log$
-  Revision 1.3  1999-01-13 22:52:40  florian
+  Revision 1.4  1999-01-19 10:19:06  florian
+    * bug with mul. of dwords fixed, reported by Alexander Stohr
+    * some changes to compile with TP
+    + small enhancements for the new code generator
+
+  Revision 1.3  1999/01/13 22:52:40  florian
     + YES, finally the new code generator is compilable, but it doesn't run yet :(
 
   Revision 1.2  1998/12/26 15:20:32  florian

+ 6 - 2
compiler/pp.pas

@@ -159,7 +159,6 @@ uses
   {$O os2_targ}
   {$O win_targ}
 {$endif i386}
-  {$O asmutils}
   {$ifdef gdb}
         {$O gdb}
   {$endif gdb}
@@ -265,7 +264,12 @@ begin
 end.
 {
   $Log$
-  Revision 1.37  1998-12-16 00:27:21  peter
+  Revision 1.38  1999-01-19 10:19:03  florian
+    * bug with mul. of dwords fixed, reported by Alexander Stohr
+    * some changes to compile with TP
+    + small enhancements for the new code generator
+
+  Revision 1.37  1998/12/16 00:27:21  peter
     * removed some obsolete version checks
 
   Revision 1.36  1998/11/27 22:54:52  michael