Bläddra i källkod

+ pass_2 for cg386
* Message() -> CGMessage() for pass_1/pass_2

peter 27 år sedan
förälder
incheckning
c72691c843

+ 20 - 15
compiler/cg386add.pas

@@ -31,9 +31,10 @@ interface
 implementation
 
     uses
-      cobjects,verbose,globals,
-      symtable,aasm,i386,types,
-      cgi386,cgai386,temp_gen,tgeni386,hcodegen;
+      cobjects,verbose,globals,systems,
+      symtable,aasm,types,
+      hcodegen,temp_gen,pass_2,
+      i386,cgai386,tgeni386;
 
 {*****************************************************************************
                                 Helpers
@@ -266,7 +267,7 @@ implementation
                ungetiftemp(p^.left^.location.reference);
                ungetiftemp(p^.right^.location.reference);
             end;
-            else Message(type_e_mismatch);
+            else CGMessage(type_e_mismatch);
           end;
         SetResultLocation(cmpop,true,p);
       end;
@@ -382,7 +383,7 @@ implementation
                      p^.location.reference:=href;
                    end;
         else
-          Message(type_e_mismatch);
+          CGMessage(type_e_mismatch);
         end;
         SetResultLocation(cmpop,true,p);
       end;
@@ -493,7 +494,7 @@ implementation
                                  falselabel:=ofl;
                               end;
                        else
-                         Message(type_e_mismatch);
+                         CGMessage(type_e_mismatch);
                        end;
                        secondpass(p^.right);
                        maketojumpbool(p^.right);
@@ -511,7 +512,7 @@ implementation
                        goto do_normal;
                     end
              else
-               Message(type_e_mismatch);
+               CGMessage(type_e_mismatch);
              end
            end
          else
@@ -637,7 +638,7 @@ implementation
                                   unsigned:=false;
                                 end
                                else
-                                Message(type_e_mismatch);
+                                CGMessage(type_e_mismatch);
                              end;
                       muln : begin
                                if is_set then
@@ -679,7 +680,7 @@ implementation
                        orn : op:=A_OR;
                       andn : op:=A_AND;
                    else
-                     Message(type_e_mismatch);
+                     CGMessage(type_e_mismatch);
                    end;
 
                    { left and right no register?  }
@@ -904,7 +905,7 @@ implementation
                       ltn,lten,gtn,gten,
                       equaln,unequaln :
                                 cmpop:=true;
-                      else Message(type_e_mismatch);
+                      else CGMessage(type_e_mismatch);
                    end;
                    unsigned:=true;
                    { left and right no register? }
@@ -989,7 +990,7 @@ implementation
                                             op:=A_FCOMPP;
                                             cmpop:=true;
                                          end;
-                       else Message(type_e_mismatch);
+                       else CGMessage(type_e_mismatch);
                     end;
 
                     if (p^.right^.location.loc<>LOC_FPU) then
@@ -1155,7 +1156,7 @@ implementation
                         op:=A_POR;
                       andn:
                         op:=A_PAND;
-                      else Message(type_e_mismatch);
+                      else CGMessage(type_e_mismatch);
                    end;
                    { left and right no register?  }
                    { then one must be demanded    }
@@ -1268,7 +1269,7 @@ implementation
                      end;
                 end
 {$endif SUPPORT_MMX}
-              else Message(type_e_mismatch);
+              else CGMessage(type_e_mismatch);
            end;
        SetResultLocation(cmpop,unsigned,p);
     end;
@@ -1277,7 +1278,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.12  1998-09-14 10:43:44  peter
+  Revision 1.13  1998-09-17 09:42:09  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.12  1998/09/14 10:43:44  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.11  1998/09/07 18:45:52  peter
@@ -1289,7 +1294,7 @@ end.
       we need an new version of STRCAT which takes a length parameter
 
   Revision 1.9  1998/09/04 08:41:36  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.8  1998/08/28 10:54:18  peter
     * fixed smallset generation from elements, it has never worked before!

+ 17 - 14
compiler/cg386cal.pas

@@ -36,10 +36,9 @@ implementation
 
     uses
       cobjects,verbose,globals,systems,
-      aasm,i386,types,
-      cgi386,cgai386,temp_gen,tgeni386,hcodegen,
-      cg386ld;
-
+      aasm,types,
+      hcodegen,temp_gen,pass_2,
+      i386,cgai386,tgeni386,cg386ld;
 
 {*****************************************************************************
                              SecondCallParaN
@@ -133,7 +132,7 @@ implementation
               else
                 begin
                    if not(p^.left^.location.loc in [LOC_MEM,LOC_REFERENCE]) then
-                     Message(type_e_mismatch)
+                     CGMessage(type_e_mismatch)
                    else
                      begin
                        if inlined then
@@ -153,7 +152,7 @@ implementation
          else if (defcoll^.paratyp=vs_var) then
            begin
               if (p^.left^.location.loc<>LOC_REFERENCE) then
-                Message(cg_e_var_must_be_reference);
+                CGMessage(cg_e_var_must_be_reference);
               maybe_push_open_array_high;
               inc(pushedparasize,4);
               if inlined then
@@ -171,7 +170,7 @@ implementation
            begin
               tempdeftype:=p^.resulttype^.deftype;
               if tempdeftype=filedef then
-               Message(cg_e_file_must_call_by_reference);
+               CGMessage(cg_e_file_must_call_by_reference);
               if (defcoll^.paratyp=vs_const) and
                  dont_copy_const_param(p^.resulttype) then
                 begin
@@ -463,7 +462,7 @@ implementation
                                end;
                           end;
                         else
-                          Message(cg_e_illegal_expression);
+                          CGMessage(cg_e_illegal_expression);
                         end;
                      end;
                    LOC_JUMP:
@@ -760,7 +759,7 @@ implementation
                                     { direct call to inherited method }
                                     if (p^.procdefinition^.options and poabstractmethod)<>0 then
                                       begin
-                                         Message(cg_e_cant_call_abstract_method);
+                                         CGMessage(cg_e_cant_call_abstract_method);
                                          goto dont_call;
                                       end;
                                     { generate no virtual call }
@@ -798,7 +797,7 @@ implementation
                                          if not ((aktprocsym^.definition^.options
                                            and (poconstructor or podestructor))<>0) then
 
-                                          Message(cg_w_member_cd_call_from_method);
+                                          CGMessage(cg_w_member_cd_call_from_method);
                                       end;
                                     if is_con_or_destructor then
                                       push_int(0)
@@ -926,7 +925,7 @@ implementation
                         { always be placed wrong }
                         if is_con_or_destructor then
                           begin
-                             Message(cg_w_member_cd_call_from_method);
+                             CGMessage(cg_w_member_cd_call_from_method);
                              push_int(0);
                           end;
                      end;
@@ -989,7 +988,7 @@ implementation
                 Why? Bp7 Allows it (PFV)
 
               if (p^.procdefinition^.options and poexports)<>0 then
-                Message(cg_e_dont_call_exported_direct);  }
+                CGMessage(cg_e_dont_call_exported_direct);  }
 
               if (not inlined) and ((pushedparasize mod 4)<>0) then
                 begin
@@ -1406,11 +1405,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.23  1998-09-14 10:43:45  peter
+  Revision 1.24  1998-09-17 09:42:10  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.23  1998/09/14 10:43:45  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.22  1998/09/04 08:41:37  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.21  1998/09/01 12:47:57  peter
     * use pdef^.size instead of orddef^.typ

+ 11 - 6
compiler/cg386cnv.pas

@@ -37,9 +37,10 @@ interface
 implementation
 
    uses
-     cobjects,verbose,globals,
-     symtable,aasm,i386,types,
-     cgi386,cgai386,temp_gen,tgeni386,hcodegen;
+      cobjects,verbose,globals,systems,
+      symtable,aasm,types,
+      hcodegen,temp_gen,pass_2,
+      i386,cgai386,tgeni386;
 
 {*****************************************************************************
                              SecondTypeConv
@@ -614,7 +615,7 @@ implementation
            parraydef(p^.left^.resulttype)^.lowrange+1;
 
          if l>255 then
-           Message(type_e_mismatch);
+           CGMessage(type_e_mismatch);
 
          { write the length }
              exprasmlist^.concat(new(pai386,op_const_ref(A_MOV,S_B,l,
@@ -1252,7 +1253,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.19  1998-09-14 10:43:46  peter
+  Revision 1.20  1998-09-17 09:42:12  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.19  1998/09/14 10:43:46  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.18  1998/09/11 12:29:40  pierre
@@ -1262,7 +1267,7 @@ end.
     * removed explicit range_check was buggy
 
   Revision 1.17  1998/09/04 08:41:38  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.16  1998/09/03 17:39:03  florian
     + better code for type conversation longint/dword to real type

+ 9 - 4
compiler/cg386con.pas

@@ -40,9 +40,10 @@ interface
 implementation
 
     uses
-      cobjects,verbose,globals,
-      symtable,aasm,i386,types,
-      hcodegen,cgai386,temp_gen,tgeni386,cgi386;
+      cobjects,verbose,globals,systems,
+      symtable,aasm,types,
+      hcodegen,temp_gen,pass_2,
+      i386,cgai386,tgeni386;
 
 {*****************************************************************************
                              SecondRealConst
@@ -316,7 +317,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.13  1998-09-07 18:45:53  peter
+  Revision 1.14  1998-09-17 09:42:13  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.13  1998/09/07 18:45:53  peter
     * update smartlinking, uses getdatalabel
     * renamed ptree.value vars to value_str,value_real,value_set
 

+ 13 - 27
compiler/cg386flw.pas

@@ -45,8 +45,9 @@ implementation
 
     uses
       cobjects,verbose,globals,systems,
-      symtable,aasm,i386,types,
-      cgi386,cgai386,temp_gen,tgeni386,hcodegen;
+      symtable,aasm,types,
+      hcodegen,temp_gen,pass_2,
+      i386,cgai386,tgeni386;
 
 {*****************************************************************************
                          Second_While_RepeatN
@@ -193,7 +194,7 @@ implementation
          cleartempgen;
          secondpass(p^.t2);
          if not(simple_loadn) then
-          Message(cg_e_illegal_count_var);
+          CGMessage(cg_e_illegal_count_var);
 
          { produce start assignment }
          cleartempgen;
@@ -466,7 +467,7 @@ do_jmp:
          if aktbreaklabel<>nil then
            emitl(A_JMP,aktbreaklabel)
          else
-           Message(cg_e_break_not_allowed);
+           CGMessage(cg_e_break_not_allowed);
       end;
 
 
@@ -479,7 +480,7 @@ do_jmp:
          if aktcontinuelabel<>nil then
            emitl(A_JMP,aktcontinuelabel)
          else
-           Message(cg_e_continue_not_allowed);
+           CGMessage(cg_e_continue_not_allowed);
       end;
 
 
@@ -541,7 +542,7 @@ do_jmp:
                    emitpushreferenceaddr(exprasmlist,p^.left^.location.reference);
                  LOC_CREGISTER,LOC_REGISTER : exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,
                        p^.left^.location.register)));
-                 else Message(type_e_mismatch);
+                 else CGMessage(type_e_mismatch);
               end;
               emitcall('FPC_RAISEEXCEPTION',true);
              end
@@ -733,11 +734,15 @@ do_jmp:
 end.
 {
   $Log$
-  Revision 1.16  1998-09-14 10:43:48  peter
+  Revision 1.17  1998-09-17 09:42:14  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.16  1998/09/14 10:43:48  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.15  1998/09/04 08:41:39  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.14  1998/09/03 17:08:39  pierre
     * better lines for stabs
@@ -753,25 +758,6 @@ end.
 
   Revision 1.11  1998/08/05 16:00:10  florian
     * some fixes for ansi strings
-    * $log$ to $Log$
-    * $log$ to Revision 1.16  1998-09-14 10:43:48  peter
-    * $log$ to   * all internal RTL functions start with FPC_
-    * $log$ to
-    * $log$ to Revision 1.15  1998/09/04 08:41:39  peter
-    * $log$ to   * updated some error messages
-    * $log$ to
-    * $log$ to Revision 1.14  1998/09/03 17:08:39  pierre
-    * $log$ to   * better lines for stabs
-    * $log$ to     (no scroll back to if before else part
-    * $log$ to     no return to case line at jump outside case)
-    * $log$ to   + source lines also if not in order
-    * $log$ to
-    * $log$ to Revision 1.13  1998/09/01 12:47:58  peter
-    * $log$ to   * use pdef^.size instead of orddef^.typ
-    * $log$ to
-    * $log$ to Revision 1.12  1998/08/28 10:56:58  peter
-    * $log$ to   * removed warnings
-    * $log$ to changed
 
   Revision 1.10  1998/08/04 16:26:26  jonas
     * converted // comment to TP comment

+ 14 - 10
compiler/cg386inl.pas

@@ -33,9 +33,9 @@ implementation
 
     uses
       cobjects,verbose,globals,systems,
-      aasm,i386,types,symtable,
-      cgi386,cgai386,temp_gen,tgeni386,hcodegen,
-      cg386ld,cg386cal;
+      symtable,aasm,types,
+      hcodegen,temp_gen,pass_2,
+      i386,cgai386,tgeni386,cg386ld,cg386cal;
 
 
 {*****************************************************************************
@@ -160,7 +160,7 @@ implementation
                      { save reference in temporary variables }
                      if node^.left^.location.loc<>LOC_REFERENCE then
                        begin
-                          Message(cg_e_illegal_expression);
+                          CGMessage(cg_e_illegal_expression);
                           exit;
                        end;
 
@@ -199,7 +199,7 @@ implementation
                      node:=node^.right;
                      hp^.right:=nil;
                      if hp^.is_colon_para then
-                       Message(parser_e_illegal_colon_qualifier);
+                       CGMessage(parser_e_illegal_colon_qualifier);
                      if ft=ft_typed then
                        never_copy_const_param:=true;
                      secondcallparan(hp,@dummycoll,false,false,0);
@@ -263,7 +263,7 @@ implementation
                                    secondcallparan(hp,@dummycoll,false,false,0);
                                    hp^.right:=node;
                                    if pararesult^.deftype<>floatdef then
-                                     Message(parser_e_illegal_colon_qualifier);
+                                     CGMessage(parser_e_illegal_colon_qualifier);
                                    if codegenerror then
                                      exit;
                                 end
@@ -352,7 +352,7 @@ implementation
                                        bool8bit,
                                       bool16bit,
                                       bool32bit : if  doread then
-                                                    Message(parser_e_illegal_parameter_list)
+                                                    CGMessage(parser_e_illegal_parameter_list)
                                                   else
                                                     emitcall('FPC_WRITE_TEXT_BOOLEAN',true);
                                      end;
@@ -399,7 +399,7 @@ implementation
              begin
                 p^.left:=reversparameter(p^.left);
                 if npara<>nb_para then
-                  Message(cg_f_internal_error_in_secondinline);
+                  CGMessage(cg_f_internal_error_in_secondinline);
                 hp:=p^.left;
                 while assigned(hp) do
                   begin
@@ -929,7 +929,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.4  1998-09-14 10:43:49  peter
+  Revision 1.5  1998-09-17 09:42:15  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.4  1998/09/14 10:43:49  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.3  1998/09/05 23:03:57  florian
@@ -940,7 +944,7 @@ end.
         const parameters only if they are passed by reference !
 
   Revision 1.2  1998/09/04 08:41:40  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.1  1998/08/31 12:22:14  peter
     * secondinline moved to cg386inl

+ 9 - 4
compiler/cg386ld.pas

@@ -45,9 +45,10 @@ interface
 implementation
 
     uses
-      cobjects,verbose,globals,
+      cobjects,verbose,globals,systems,
       symtable,aasm,types,
-      cgi386,cgai386,temp_gen,tgeni386,hcodegen;
+      hcodegen,temp_gen,pass_2,
+      cgai386,tgeni386;
 
 {*****************************************************************************
                              SecondLoad
@@ -292,7 +293,7 @@ implementation
               loc:=LOC_CMMXREGISTER;
             else
                begin
-                  Message(cg_e_illegal_expression);
+                  CGMessage(cg_e_illegal_expression);
                   exit;
                end;
          end;
@@ -551,7 +552,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.14  1998-09-14 10:43:50  peter
+  Revision 1.15  1998-09-17 09:42:16  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.14  1998/09/14 10:43:50  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.13  1998/09/04 12:24:24  florian

+ 9 - 4
compiler/cg386mat.pas

@@ -35,9 +35,10 @@ interface
 implementation
 
     uses
-      cobjects,verbose,globals,
-      symtable,aasm,i386,
-      types,cgi386,cgai386,tgeni386,hcodegen;
+      cobjects,verbose,globals,systems,
+      symtable,aasm,types,
+      hcodegen,temp_gen,pass_2,
+      i386,cgai386,tgeni386;
 
 {*****************************************************************************
                              SecondModDiv
@@ -558,7 +559,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.6  1998-09-09 14:37:37  florian
+  Revision 1.7  1998-09-17 09:42:17  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.6  1998/09/09 14:37:37  florian
     * mod/div for cardinal type fixed
 
   Revision 1.5  1998/08/23 16:07:20  florian

+ 10 - 5
compiler/cg386mem.pas

@@ -44,8 +44,9 @@ implementation
 
     uses
       cobjects,verbose,globals,systems,
-      symtable,aasm,i386,types,
-      cgi386,cgai386,temp_gen,tgeni386,hcodegen;
+      symtable,aasm,types,
+      hcodegen,temp_gen,pass_2,
+      i386,cgai386,tgeni386;
 
 {*****************************************************************************
                              SecondLoadVMT
@@ -407,7 +408,7 @@ implementation
                      begin
                         if (p^.right^.value>parraydef(p^.left^.resulttype)^.highrange) or
                            (p^.right^.value<parraydef(p^.left^.resulttype)^.lowrange) then
-                          Message(parser_e_range_check_error);
+                          CGMessage(parser_e_range_check_error);
 
                         dec(p^.left^.location.reference.offset,
                             get_mul_size*parraydef(p^.left^.resulttype)^.lowrange);
@@ -478,7 +479,7 @@ implementation
               { calculate from left to right }
               if (p^.location.loc<>LOC_REFERENCE) and
                  (p^.location.loc<>LOC_MEM) then
-                Message(cg_e_illegal_expression);
+                CGMessage(cg_e_illegal_expression);
               pushed:=maybe_push(p^.right^.registers32,p);
               secondpass(p^.right);
               if pushed then restore(p);
@@ -643,7 +644,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.10  1998-09-14 10:43:52  peter
+  Revision 1.11  1998-09-17 09:42:18  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.10  1998/09/14 10:43:52  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.9  1998/09/03 16:03:15  florian

+ 8 - 3
compiler/cg386set.pas

@@ -35,8 +35,9 @@ implementation
 
     uses
       cobjects,verbose,globals,systems,
-      symtable,aasm,i386,types,
-      cgi386,cgai386,tgeni386,temp_gen,hcodegen;
+      symtable,aasm,types,
+      hcodegen,temp_gen,pass_2,
+      i386,cgai386,tgeni386;
 
      const
        bytes2Sxx:array[1..4] of Topsize=(S_B,S_W,S_NO,S_L);
@@ -783,7 +784,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.16  1998-09-14 10:43:53  peter
+  Revision 1.17  1998-09-17 09:42:20  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.16  1998/09/14 10:43:53  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.15  1998/09/09 17:51:59  florian

+ 18 - 14
compiler/cg68kadd.pas

@@ -341,7 +341,7 @@ implementation
                            ungetiftemp(p^.left^.location.reference);
                            ungetiftemp(p^.right^.location.reference);
                         end; { end this case }
-                else Message(type_e_mismatch);
+                else CGMessage(type_e_mismatch);
               end; { end case }
 
         SetResultLocation(cmpop,true,p);
@@ -458,7 +458,7 @@ implementation
                      p^.location.reference:=href;
                    end;
         else
-          Message(type_e_mismatch);
+          CGMessage(type_e_mismatch);
         end;
         SetResultLocation(cmpop,true,p);
       end;
@@ -567,7 +567,7 @@ implementation
                                  falselabel:=ofl;
                               end;
                        else
-                         Message(type_e_mismatch);
+                         CGMessage(type_e_mismatch);
                        end;
                        secondpass(p^.right);
                        maketojumpbool(p^.right);
@@ -585,7 +585,7 @@ implementation
                        goto do_normal;
                     end
              else
-               Message(type_e_mismatch);
+               CGMessage(type_e_mismatch);
              end
            end
          else
@@ -691,7 +691,7 @@ implementation
                                   unsigned:=false;
                                 end
                                else
-                                Message(type_e_mismatch);
+                                CGMessage(type_e_mismatch);
                              end;
                       muln : begin
                                if is_set then
@@ -733,7 +733,7 @@ implementation
                        orn : op:=A_OR;
                       andn : op:=A_AND;
                    else
-                     Message(type_e_mismatch);
+                     CGMessage(type_e_mismatch);
                    end;
 
                    { left and right no register?  }
@@ -863,7 +863,7 @@ implementation
                                             end
                                             else
                                             if (op=A_MULU) and (opsize = S_L) and (aktoptprocessor=MC68000) then
-                                             Message(cg_f_32bit_not_supported_in_68000)
+                                             CGMessage(cg_f_32bit_not_supported_in_68000)
                                             else
                                               emit_reg_reg(op,opsize,p^.right^.location.register,
                                                 p^.location.register);
@@ -892,7 +892,7 @@ implementation
                                             end
                                             else
                                             if (op=A_MULU) and (opsize = S_L) and (aktoptprocessor=MC68000) then
-                                             Message(cg_f_32bit_not_supported_in_68000)
+                                             CGMessage(cg_f_32bit_not_supported_in_68000)
                                             else
                                             { When one of the source/destination is a memory reference  }
                                             { and the operator is EOR, the we must load it into the     }
@@ -946,7 +946,7 @@ implementation
                              end
                              else
                              if (op=A_MULU) and (opsize = S_L) and (aktoptprocessor=MC68000) then
-                              Message(cg_f_32bit_not_supported_in_68000)
+                              CGMessage(cg_f_32bit_not_supported_in_68000)
                              else
 
                                exprasmlist^.concat(new(pai68k,op_reg_reg(op,opsize,
@@ -978,7 +978,7 @@ implementation
                       ltn,lten,gtn,gten,
                       equaln,unequaln :
                                 cmpop:=true;
-                      else Message(type_e_mismatch);
+                      else CGMessage(type_e_mismatch);
                    end;
                    unsigned:=true;
                    { left and right no register? }
@@ -1063,7 +1063,7 @@ implementation
                                             op:=A_FCMP;
                                             cmpop:=true;
                                          end;
-                       else Message(type_e_mismatch);
+                       else CGMessage(type_e_mismatch);
                     end;
 
                     if (p^.left^.location.loc <> LOC_FPU) and
@@ -1254,7 +1254,7 @@ implementation
                  end
 
 
-              else Message(type_e_mismatch);
+              else CGMessage(type_e_mismatch);
            end;
        SetResultLocation(cmpop,unsigned,p);
     end;
@@ -1263,7 +1263,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.4  1998-09-14 10:43:54  peter
+  Revision 1.5  1998-09-17 09:42:21  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.4  1998/09/14 10:43:54  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.3  1998/09/07 18:45:55  peter
@@ -1271,7 +1275,7 @@ end.
     * renamed ptree.value vars to value_str,value_real,value_set
 
   Revision 1.2  1998/09/04 08:41:42  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.1  1998/09/01 09:07:09  peter
     * m68k fixes, splitted cg68k like cgi386

+ 15 - 11
compiler/cg68kcal.pas

@@ -111,7 +111,7 @@ implementation
                 begin
                    if (p^.left^.location.loc<>LOC_REFERENCE) and
                       (p^.left^.location.loc<>LOC_MEM) then
-                     Message(type_e_mismatch)
+                     CGMessage(type_e_mismatch)
                    else
                      begin
                         emitpushreferenceaddr(p^.left^.location.reference);
@@ -124,7 +124,7 @@ implementation
          else if (defcoll^.paratyp=vs_var) then
            begin
               if (p^.left^.location.loc<>LOC_REFERENCE) then
-                Message(cg_e_var_must_be_reference);
+                CGMessage(cg_e_var_must_be_reference);
               maybe_push_open_array_high;
               inc(pushedparasize,4);
               emitpushreferenceaddr(p^.left^.location.reference);
@@ -134,7 +134,7 @@ implementation
            begin
               tempdeftype:=p^.resulttype^.deftype;
               if tempdeftype=filedef then
-               Message(cg_e_file_must_call_by_reference);
+               CGMessage(cg_e_file_must_call_by_reference);
               if (defcoll^.paratyp=vs_const) and
                  dont_copy_const_param(p^.resulttype) then
                 begin
@@ -287,7 +287,7 @@ implementation
                                                                 end;
 {$endif}
                                                       s80real : begin
-                                                                    Message(cg_f_extended_cg68k_not_supported);
+                                                                    CGMessage(cg_f_extended_cg68k_not_supported);
 {                                                                   inc(tempreference.offset,6);
                                                                    emit_push_mem(tempreference);
                                                                    dec(tempreference.offset,4);
@@ -349,7 +349,7 @@ implementation
                                                           end;
                                                      end;
                                                 end;
-                                     else Message(cg_e_illegal_expression);
+                                     else CGMessage(cg_e_illegal_expression);
                                   end;
                                end;
                  LOC_JUMP     : begin
@@ -528,7 +528,7 @@ implementation
                                       { direct call to inherited method }
                                       if (p^.procdefinition^.options and poabstractmethod)<>0 then
                                         begin
-                                           Message(cg_e_cant_call_abstract_method);
+                                           CGMessage(cg_e_cant_call_abstract_method);
                                            goto dont_call;
                                         end;
                                       { generate no virtual call }
@@ -565,7 +565,7 @@ implementation
                                    begin
                                     if not ((aktprocsym^.definition^.options
                                       and (poconstructor or podestructor))<>0) then
-                                        Message(cg_w_member_cd_call_from_method);
+                                        CGMessage(cg_w_member_cd_call_from_method);
                                    end;
                                       { con- and destructors need a pointer to the vmt }
                                       if is_con_or_destructor then
@@ -704,7 +704,7 @@ implementation
                         { always be placed wrong }
                         if is_con_or_destructor then
                           begin
-                             Message(cg_w_member_cd_call_from_method);
+                             CGMessage(cg_w_member_cd_call_from_method);
                              { not insert VMT pointer }                             { VMT-Zeiger nicht eintragen }
                              push_int(0);
                           end;
@@ -766,7 +766,7 @@ implementation
 
               { exported methods should be never called direct }
               if (p^.procdefinition^.options and poexports)<>0 then
-               Message(cg_e_dont_call_exported_direct);
+               CGMessage(cg_e_dont_call_exported_direct);
 
               if ((p^.procdefinition^.options and povirtualmethod)<>0) and
                  not(no_virtual_call) then
@@ -1044,11 +1044,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.4  1998-09-14 10:43:55  peter
+  Revision 1.5  1998-09-17 09:42:22  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.4  1998/09/14 10:43:55  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.3  1998/09/04 08:41:43  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.2  1998/09/01 12:47:59  peter
     * use pdef^.size instead of orddef^.typ

+ 6 - 2
compiler/cg68kcnv.pas

@@ -680,7 +680,7 @@ implementation
            parraydef(p^.left^.resulttype)^.lowrange+1;
 
          if l>255 then
-           Message(type_e_mismatch);
+           CGMessage(type_e_mismatch);
 
          { write the length }
            exprasmlist^.concat(new(pai68k,op_const_ref(A_MOVE,S_B,l,
@@ -1376,7 +1376,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.4  1998-09-14 10:43:56  peter
+  Revision 1.5  1998-09-17 09:42:23  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.4  1998/09/14 10:43:56  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.3  1998/09/11 12:29:43  pierre

+ 9 - 5
compiler/cg68kflw.pas

@@ -195,7 +195,7 @@ implementation
          cleartempgen;
          secondpass(p^.t2);
          if not(simple_loadn) then
-          Message(cg_e_illegal_count_var);
+          CGMessage(cg_e_illegal_count_var);
 
          { produce start assignment }
          cleartempgen;
@@ -499,7 +499,7 @@ do_jmp:
          if aktbreaklabel<>nil then
            emitl(A_JMP,aktbreaklabel)
          else
-           Message(cg_e_break_not_allowed);
+           CGMessage(cg_e_break_not_allowed);
       end;
 
 
@@ -512,7 +512,7 @@ do_jmp:
          if aktcontinuelabel<>nil then
            emitl(A_JMP,aktcontinuelabel)
          else
-           Message(cg_e_continue_not_allowed);
+           CGMessage(cg_e_continue_not_allowed);
       end;
 
 
@@ -574,7 +574,7 @@ do_jmp:
                  LOC_MEM,LOC_REFERENCE : emitpushreferenceaddr(p^.left^.location.reference);
                  LOC_CREGISTER,LOC_REGISTER : exprasmlist^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,
                    p^.left^.location.register,R_SPPUSH)));
-                 else Message(type_e_mismatch);
+                 else CGMessage(type_e_mismatch);
               end;
               emitcall('FPC_RAISEEXCEPTION',true);
              end
@@ -769,7 +769,11 @@ do_jmp:
 end.
 {
   $Log$
-  Revision 1.4  1998-09-14 10:43:58  peter
+  Revision 1.5  1998-09-17 09:42:24  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.4  1998/09/14 10:43:58  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.3  1998/09/04 08:41:47  peter

+ 11 - 7
compiler/cg68kinl.pas

@@ -159,7 +159,7 @@ implementation
                      { save reference in temporary variables }
                      if node^.left^.location.loc<>LOC_REFERENCE then
                        begin
-                          Message(cg_e_illegal_expression);
+                          CGMessage(cg_e_illegal_expression);
                           exit;
                        end;
 
@@ -198,7 +198,7 @@ implementation
                      node:=node^.right;
                      hp^.right:=nil;
                      if hp^.is_colon_para then
-                       Message(parser_e_illegal_colon_qualifier);
+                       CGMessage(parser_e_illegal_colon_qualifier);
                      if ft=ft_typed then
                        never_copy_const_param:=true;
                      secondcallparan(hp,@dummycoll,false);
@@ -262,7 +262,7 @@ implementation
                                    secondcallparan(hp,@dummycoll,false);
                                    hp^.right:=node;
                                    if pararesult^.deftype<>floatdef then
-                                     Message(parser_e_illegal_colon_qualifier);
+                                     CGMessage(parser_e_illegal_colon_qualifier);
                                    if codegenerror then
                                      exit;
                                 end
@@ -351,7 +351,7 @@ implementation
                                        bool8bit,
                                       bool16bit,
                                       bool32bit : if  doread then
-                                                    Message(parser_e_illegal_parameter_list)
+                                                    CGMessage(parser_e_illegal_parameter_list)
                                                   else
                                                     emitcall('FPC_WRITE_TEXT_BOOLEAN',true);
                                      end;
@@ -398,7 +398,7 @@ implementation
              begin
                 p^.left:=reversparameter(p^.left);
                 if npara<>nb_para then
-                  Message(cg_f_internal_error_in_secondinline);
+                  CGMessage(cg_f_internal_error_in_secondinline);
                 hp:=p^.left;
                 while assigned(hp) do
                   begin
@@ -903,11 +903,15 @@ implementation
 end.
 {
   $Log$
-  Revision 1.3  1998-09-14 10:43:59  peter
+  Revision 1.4  1998-09-17 09:42:26  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.3  1998/09/14 10:43:59  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.2  1998/09/04 08:41:48  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.1  1998/09/01 09:07:09  peter
     * m68k fixes, splitted cg68k like cgi386

+ 7 - 3
compiler/cg68kld.pas

@@ -277,7 +277,7 @@ implementation
             LOC_CREGISTER : loc:=LOC_CREGISTER;
             else
                begin
-                  Message(cg_e_illegal_expression);
+                  CGMessage(cg_e_illegal_expression);
                   exit;
                end;
          end;
@@ -442,7 +442,7 @@ implementation
       begin
          clear_reference(p^.location.reference);
          hr_valid:=false;
-{ !!!!!!! }     
+{ !!!!!!! }
 
 (*         if @procinfo<>pprocinfo(p^.funcretprocinfo) then
            begin
@@ -480,7 +480,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.1  1998-09-01 09:07:09  peter
+  Revision 1.2  1998-09-17 09:42:27  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.1  1998/09/01 09:07:09  peter
     * m68k fixes, splitted cg68k like cgi386
 
 }

+ 8 - 4
compiler/cg68kmem.pas

@@ -427,7 +427,7 @@ implementation
                        begin
                      if (p^.right^.value>parraydef(p^.left^.resulttype)^.highrange) or
                         (p^.right^.value<parraydef(p^.left^.resulttype)^.lowrange) then
-                        Message(parser_e_range_check_error);
+                        CGMessage(parser_e_range_check_error);
 
                      dec(p^.left^.location.reference.offset,
                         p^.resulttype^.size*parraydef(p^.left^.resulttype)^.lowrange);
@@ -496,7 +496,7 @@ implementation
               { calculate from left to right }
               if (p^.location.loc<>LOC_REFERENCE) and
                  (p^.location.loc<>LOC_MEM) then
-                Message(cg_e_illegal_expression);
+                CGMessage(cg_e_illegal_expression);
 
               pushed:=maybe_push(p^.right^.registers32,p);
               secondpass(p^.right);
@@ -568,7 +568,7 @@ implementation
            if assigned(p^.location.reference.symbol) then
            begin
               if p^.location.reference.base <> R_NO then
-               Message(cg_f_secondvecn_base_defined_twice);
+               CGMessage(cg_f_secondvecn_base_defined_twice);
               p^.location.reference.base:=getaddressreg;
               exprasmlist^.concat(new(pai68k,op_csymbol_reg(A_LEA,S_L,newcsymbol(p^.location.reference.symbol^,0),
                 p^.location.reference.base)));
@@ -691,7 +691,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.4  1998-09-14 10:44:02  peter
+  Revision 1.5  1998-09-17 09:42:28  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.4  1998/09/14 10:44:02  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.3  1998/09/11 12:29:44  pierre

+ 6 - 2
compiler/cg68kset.pas

@@ -812,7 +812,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.4  1998-09-14 10:44:03  peter
+  Revision 1.5  1998-09-17 09:42:29  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.4  1998/09/14 10:44:03  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.3  1998/09/07 18:45:59  peter
@@ -820,7 +824,7 @@ end.
     * renamed ptree.value vars to value_str,value_real,value_set
 
   Revision 1.2  1998/09/04 08:41:49  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.1  1998/09/01 09:07:09  peter
     * m68k fixes, splitted cg68k like cgi386

+ 16 - 12
compiler/cga68k.pas

@@ -189,7 +189,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
                          end;
                        end;
         else
-         Message(type_e_mismatch);
+         CGMessage(type_e_mismatch);
         end;
       end;
 
@@ -377,7 +377,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
                 end;
            end
          else
-          Message(type_e_mismatch);
+          CGMessage(type_e_mismatch);
       end;
 
     procedure emitoverflowcheck(p: ptree);
@@ -595,7 +595,7 @@ begin
     { omit stack frame ? }
     if procinfo.framepointer=stack_pointer then
         begin
-            Message(cg_d_stackframe_omited);
+            CGMessage(cg_d_stackframe_omited);
             nostackframe:=true;
             if (aktprocsym^.definition^.options and (pounitinit or poproginit)<>0) then
                 parasize:=0
@@ -631,7 +631,7 @@ begin
                             if (stackframe > -32767) and (stackframe < 32769) then
                               procinfo.aktentrycode^.insert(new(pai68k,op_reg_const(A_LINK,S_W,R_A6,-stackframe)))
                             else
-                              Message(cg_e_stacklimit_in_local_routine);
+                              CGMessage(cg_e_stacklimit_in_local_routine);
                         end
                     else
                         begin
@@ -655,7 +655,7 @@ begin
                                procinfo.aktentrycode^.insert(new(pai68k,op_reg_reg(A_MOVE,S_L,R_A6,R_SPPUSH)));
                             end
                           else
-                            Message(cg_e_stacklimit_in_local_routine);
+                            CGMessage(cg_e_stacklimit_in_local_routine);
                         end;
                 end {endif stackframe<>0 }
             else
@@ -762,7 +762,7 @@ begin
                 if procinfo.retdef<>pdef(voiddef) then
                     begin
                         if not procinfo.funcret_is_valid then
-                          Message(sym_w_function_result_not_set);
+                          CGMessage(sym_w_function_result_not_set);
                         new(hr);
                         reset_reference(hr^);
                         hr^.offset:=procinfo.retoffset;
@@ -1191,7 +1191,7 @@ end;
             s80real : s := S_FX;
          else
            begin
-             Message(cg_f_unknown_float_type);
+             CGMessage(cg_f_unknown_float_type);
            end;
         end; { end case }
         location.loc := LOC_FPU;
@@ -1210,7 +1210,7 @@ end;
           end
           else
              { other floating types are not supported in emulation mode }
-            Message(sym_e_type_id_not_defined);
+            CGMessage(sym_e_type_id_not_defined);
         end;
       end;
 
@@ -1258,7 +1258,7 @@ end;
             s80real : s := S_FX;
          else
            begin
-             Message(cg_f_unknown_float_type);
+             CGMessage(cg_f_unknown_float_type);
            end;
         end; { end case }
         if not ((cs_fp_emulation) in aktmoduleswitches) then
@@ -1286,7 +1286,7 @@ end;
           end
           else
              { other floating types are not supported in emulation mode }
-            Message(sym_e_type_id_not_defined);
+            CGMessage(sym_e_type_id_not_defined);
         end;
         location.fpureg:=R_NO;  { no register in LOC_FPU now }
       end;
@@ -1345,7 +1345,11 @@ end;
 end.
 {
   $Log$
-  Revision 1.16  1998-09-14 10:44:04  peter
+  Revision 1.17  1998-09-17 09:42:30  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.16  1998/09/14 10:44:04  peter
     * all internal RTL functions start with FPC_
 
   Revision 1.15  1998/09/07 18:46:00  peter
@@ -1353,7 +1357,7 @@ end.
     * renamed ptree.value vars to value_str,value_real,value_set
 
   Revision 1.14  1998/09/04 08:41:50  peter
-    * updated some error messages
+    * updated some error CGMessages
 
   Revision 1.13  1998/09/01 12:48:02  peter
     * use pdef^.size instead of orddef^.typ

+ 0 - 756
compiler/cgi386.pas

@@ -1,756 +0,0 @@
-{
-    $Id$
-    Copyright (c) 1993-98 by Florian Klaempfl
-
-    This unit generates i386 (or better) assembler from the parse tree
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- ****************************************************************************
-}
-{$ifdef TP}
-  {$E+,F+,N+,D+,L+,Y+}
-{$endif}
-unit cgi386;
-interface
-
-uses
-  tree;
-
-{ produces assembler for the expression in variable p }
-{ and produces an assembler node at the end           }
-procedure generatecode(var p : ptree);
-
-{ produces the actual code }
-function do_secondpass(var p : ptree) : boolean;
-procedure secondpass(var p : ptree);
-
-
-{$ifdef test_dest_loc}
-
-const
-  { used to avoid temporary assignments }
-  dest_loc_known : boolean = false;
-  in_dest_loc    : boolean = false;
-  dest_loc_tree  : ptree = nil;
-
-var
-  dest_loc : tlocation;
-
-procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
-
-{$endif test_dest_loc}
-
-
-implementation
-
-   uses
-     cobjects,verbose,comphook,systems,globals,files,
-     symtable,types,aasm,scanner,
-     pass_1,hcodegen,temp_gen
-{$ifdef GDB}
-     ,gdb
-{$endif}
-{$ifdef i386}
-     ,i386,tgeni386,cgai386
-     ,cg386con,cg386mat,cg386cnv,cg386set,cg386add
-     ,cg386mem,cg386cal,cg386ld,cg386flw,cg386inl
-{$endif}
-     ;
-
-{$ifdef test_dest_loc}
-       procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
-
-         begin
-            if (dest_loc.loc=LOC_CREGISTER) or (dest_loc.loc=LOC_REGISTER) then
-              begin
-                emit_reg_reg(A_MOV,s,reg,dest_loc.register);
-                p^.location:=dest_loc;
-                in_dest_loc:=true;
-              end
-            else
-            if (dest_loc.loc=LOC_REFERENCE) or (dest_loc.loc=LOC_MEM) then
-              begin
-                exprasmlist^.concat(new(pai386,op_reg_ref(A_MOV,s,reg,newreference(dest_loc.reference))));
-                p^.location:=dest_loc;
-                in_dest_loc:=true;
-              end
-            else
-              internalerror(20080);
-         end;
-
-{$endif test_dest_loc}
-
-
-    procedure message(const t : tmsgconst);
-
-      var
-         olderrorcount : longint;
-
-      begin
-         if not(codegenerror) then
-           begin
-              olderrorcount:=status.errorcount;
-              verbose.Message(t);
-              codegenerror:=olderrorcount<>status.errorcount;
-           end;
-      end;
-
-    procedure message1(const t : tmsgconst;const s : string);
-
-      var
-         olderrorcount : longint;
-
-      begin
-         if not(codegenerror) then
-           begin
-              olderrorcount:=status.errorcount;
-              verbose.Message1(t,s);
-              codegenerror:=olderrorcount<>status.errorcount;
-           end;
-      end;
-
-    procedure message2(const t : tmsgconst;const s1,s2 : string);
-
-      var
-         olderrorcount : longint;
-
-      begin
-         if not(codegenerror) then
-           begin
-              olderrorcount:=status.errorcount;
-              verbose.Message2(t,s1,s2);
-              codegenerror:=olderrorcount<>status.errorcount;
-           end;
-      end;
-
-    procedure message3(const t : tmsgconst;const s1,s2,s3 : string);
-
-      var
-         olderrorcount : longint;
-
-      begin
-         if not(codegenerror) then
-           begin
-              olderrorcount:=status.errorcount;
-              verbose.Message3(t,s1,s2,s3);
-              codegenerror:=olderrorcount<>status.errorcount;
-           end;
-      end;
-
-{*****************************************************************************
-                              SecondPass
-*****************************************************************************}
-
-    type
-       secondpassproc = procedure(var p : ptree);
-
-    procedure secondnothing(var p : ptree);
-      begin
-      end;
-
-
-    procedure seconderror(var p : ptree);
-
-      begin
-         p^.error:=true;
-         codegenerror:=true;
-      end;
-
-
-    procedure secondstatement(var p : ptree);
-      var
-         hp : ptree;
-      begin
-         hp:=p;
-         while assigned(hp) do
-          begin
-            if assigned(hp^.right) then
-             begin
-               cleartempgen;
-               secondpass(hp^.right);
-             end;
-            hp:=hp^.left;
-          end;
-      end;
-
-
-    procedure secondblockn(var p : ptree);
-      begin
-      { do second pass on left node }
-        if assigned(p^.left) then
-         secondpass(p^.left);
-      end;
-
-
-    procedure secondasm(var p : ptree);
-      begin
-         exprasmlist^.concatlist(p^.p_asm);
-         if not p^.object_preserved then
-           maybe_loadesi;
-       end;
-
-
-     procedure secondpass(var p : ptree);
-       const
-         procedures : array[ttreetyp] of secondpassproc =
-            (secondadd,secondadd,secondadd,secondmoddiv,secondadd,
-             secondmoddiv,secondassignment,secondload,secondnothing,
-             secondadd,secondadd,secondadd,secondadd,
-             secondadd,secondadd,secondin,secondadd,
-             secondadd,secondshlshr,secondshlshr,secondadd,
-             secondadd,secondsubscriptn,secondderef,secondaddr,
-             seconddoubleaddr,
-             secondordconst,secondtypeconv,secondcalln,secondnothing,
-             secondrealconst,secondfixconst,secondumminus,
-             secondasm,secondvecn,
-             secondstringconst,secondfuncret,secondselfn,
-             secondnot,secondinline,secondniln,seconderror,
-             secondnothing,secondhnewn,secondhdisposen,secondnewn,
-             secondsimplenewdispose,secondsetelement,secondsetconst,secondblockn,
-             secondstatement,secondnothing,secondifn,secondbreakn,
-             secondcontinuen,second_while_repeatn,second_while_repeatn,secondfor,
-             secondexitn,secondwith,secondcase,secondlabel,
-             secondgoto,secondsimplenewdispose,secondtryexcept,
-             secondraise,
-             secondnothing,secondtryfinally,secondon,secondis,
-             secondas,seconderror,
-             secondfail,secondadd,secondprocinline,
-             secondnothing,secondloadvmt);
-      var
-         oldcodegenerror  : boolean;
-         oldlocalswitches : tlocalswitches;
-         oldpos           : tfileposinfo;
-      begin
-         oldcodegenerror:=codegenerror;
-         oldlocalswitches:=aktlocalswitches;
-         oldpos:=aktfilepos;
-
-         aktfilepos:=p^.fileinfo;
-         aktlocalswitches:=p^.localswitches;
-         if not(p^.error) then
-           begin
-              codegenerror:=false;
-              procedures[p^.treetype](p);
-              p^.error:=codegenerror;
-              codegenerror:=codegenerror or oldcodegenerror;
-           end
-         else
-           codegenerror:=true;
-
-         aktlocalswitches:=oldlocalswitches;
-         aktfilepos:=oldpos;
-      end;
-
-
-    function do_secondpass(var p : ptree) : boolean;
-      begin
-         codegenerror:=false;
-         if not(p^.error) then
-           secondpass(p);
-         do_secondpass:=codegenerror;
-      end;
-
-
-
-    var
-       regvars : array[1..maxvarregs] of pvarsym;
-       regvars_para : array[1..maxvarregs] of boolean;
-       regvars_refs : array[1..maxvarregs] of longint;
-       parasym : boolean;
-
-    procedure searchregvars(p : psym);
-
-      var
-         i,j,k : longint;
-
-      begin
-         if (p^.typ=varsym) and ((pvarsym(p)^.var_options and vo_regable)<>0) then
-           begin
-              { walk through all momentary register variables }
-              for i:=1 to maxvarregs do
-                begin
-                   { free register ? }
-                   if regvars[i]=nil then
-                     begin
-                        regvars[i]:=pvarsym(p);
-                        regvars_para[i]:=parasym;
-                        break;
-                     end;
-                   { else throw out a variable ? }
-                       j:=pvarsym(p)^.refs;
-                   { parameter get a less value }
-                   if parasym then
-                     begin
-                        if cs_littlesize in aktglobalswitches  then
-                          dec(j,1)
-                        else
-                          dec(j,100);
-                     end;
-                   if (j>regvars_refs[i]) and (j>0) then
-                     begin
-                        for k:=maxvarregs-1 downto i do
-                          begin
-                             regvars[k+1]:=regvars[k];
-                             regvars_para[k+1]:=regvars_para[k];
-                          end;
-                        { calc the new refs
-                        pvarsym(p)^.refs:=j; }
-                        regvars[i]:=pvarsym(p);
-                        regvars_para[i]:=parasym;
-                        regvars_refs[i]:=j;
-                        break;
-                     end;
-                end;
-           end;
-      end;
-
-    procedure generatecode(var p : ptree);
-
-      var
-         i       : longint;
-         regsize : topsize;
-         regi    : tregister;
-         hr      : preference;
-
-      label
-         nextreg;
-
-      begin
-         cleartempgen;
-         { when size optimization only count occurrence }
-         if cs_littlesize in aktglobalswitches then
-           t_times:=1
-         else
-           { reference for repetition is 100 }
-           t_times:=100;
-         { clear register count }
-{$ifdef SUPPORT_MMX}
-         for regi:=R_EAX to R_MM6 do
-           begin
-              reg_pushes[regi]:=0;
-              is_reg_var[regi]:=false;
-           end;
-{$else SUPPORT_MMX}
-         for regi:=R_EAX to R_EDI do
-           begin
-              reg_pushes[regi]:=0;
-              is_reg_var[regi]:=false;
-           end;
-{$endif SUPPORT_MMX}
-         use_esp_stackframe:=false;
-
-         if not(do_firstpass(p)) then
-           begin
-              { max. optimizations     }
-              { only if no asm is used }
-              { and no try statement   }
-              if (cs_regalloc in aktglobalswitches) and
-                ((procinfo.flags and (pi_uses_asm or pi_uses_exceptions))=0) then
-                begin
-                   { can we omit the stack frame ? }
-                   { conditions:
-                     1. procedure (not main block)
-                     2. no constructor or destructor
-                     3. no call to other procedures
-                     4. no interrupt handler
-                   }
-                   if assigned(aktprocsym) then
-                     begin
-                       if (aktprocsym^.definition^.options and
-                        (poconstructor+podestructor{+poinline}+pointerrupt)=0) and
-                        ((procinfo.flags and pi_do_call)=0) and (lexlevel>1) then
-                       begin
-                         { use ESP as frame pointer }
-                         procinfo.framepointer:=R_ESP;
-                         use_esp_stackframe:=true;
-
-                         { calc parameter distance new }
-                         dec(procinfo.framepointer_offset,4);
-                         dec(procinfo.ESI_offset,4);
-
-                         { is this correct ???}
-                         { retoffset can be negativ for results in eax !! }
-                         { the value should be decreased only if positive }
-                         if procinfo.retoffset>=0 then
-                           dec(procinfo.retoffset,4);
-
-                         dec(procinfo.call_offset,4);
-                         aktprocsym^.definition^.parast^.call_offset:=procinfo.call_offset;
-                       end;
-                     end;
-                   if (p^.registers32<4) then
-                       begin
-                        for i:=1 to maxvarregs do
-                          regvars[i]:=nil;
-                        parasym:=false;
-                      {$ifdef tp}
-                        symtablestack^.foreach(searchregvars);
-                      {$else}
-                        symtablestack^.foreach(@searchregvars);
-                      {$endif}
-                        { copy parameter into a register ? }
-                        parasym:=true;
-                      {$ifdef tp}
-                        symtablestack^.next^.foreach(searchregvars);
-                      {$else}
-                        symtablestack^.next^.foreach(@searchregvars);
-                      {$endif}
-                        { hold needed registers free }
-                        for i:=maxvarregs downto maxvarregs-p^.registers32+1 do
-                          regvars[i]:=nil;
-                        { now assign register }
-                        for i:=1 to maxvarregs-p^.registers32 do
-                          begin
-                             if assigned(regvars[i]) then
-                               begin
-                                  { it is nonsens, to copy the variable to }
-                                  { a register because we need then much   }
-                                  { pushes ?                               }
-                                  if reg_pushes[varregs[i]]>=regvars[i]^.refs then
-                                    begin
-                                       regvars[i]:=nil;
-                                       goto nextreg;
-                                    end;
-
-                                  { register is no longer available for }
-                                  { expressions                         }
-                                  { search the register which is the most }
-                                  { unused                                }
-                                  usableregs:=usableregs-[varregs[i]];
-                                  is_reg_var[varregs[i]]:=true;
-                                  dec(c_usableregs);
-
-                                  { possibly no 32 bit register are needed }
-
-                                  { call by reference/const ? }
-                                  if (regvars[i]^.varspez=vs_var) or
-                                    ((regvars[i]^.varspez=vs_const) and
-                                     dont_copy_const_param(regvars[i]^.definition)
-                                    ) then
-                                    begin
-                                       regvars[i]^.reg:=varregs[i];
-                                       regsize:=S_L;
-                                    end
-                                  else if  (regvars[i]^.definition^.deftype=orddef) and
-                                      (porddef(regvars[i]^.definition)^.typ in [bool8bit,uchar,u8bit,s8bit]) then
-                                    begin
-                                       regvars[i]^.reg:=reg32toreg8(varregs[i]);
-                                       regsize:=S_B;
-                                    end
-                                  else if (regvars[i]^.definition^.deftype=orddef) and
-                                          (porddef(regvars[i]^.definition)^.typ in [bool16bit,u16bit,s16bit]) then
-                                    begin
-                                       regvars[i]^.reg:=reg32toreg16(varregs[i]);
-                                       regsize:=S_W;
-                                    end
-                                  else
-                                    begin
-                                       regvars[i]^.reg:=varregs[i];
-                                       regsize:=S_L;
-                                    end;
-                                  { parameter must be load }
-                                  if regvars_para[i] then
-                                    begin
-                                       { procinfo is there actual,      }
-                                       { because we can't never be in a }
-                                       { nested procedure               }
-                                       { when loading parameter to reg  }
-                                       new(hr);
-                                       reset_reference(hr^);
-                                       hr^.offset:=pvarsym(regvars[i])^.address+procinfo.call_offset;
-                                       hr^.base:=procinfo.framepointer;
-                                       procinfo.aktentrycode^.concat(new(pai386,op_ref_reg(A_MOV,regsize,
-                                         hr,regvars[i]^.reg)));
-                                       unused:=unused - [regvars[i]^.reg];
-                                    end;
-                                  { procedure uses this register }
-                                  usedinproc:=usedinproc or ($80 shr byte(varregs[i]));
-                               end;
-                             nextreg:
-                               { dummy }
-                               regsize:=S_W;
-                          end;
-                        if (status.verbosity and v_debug)=v_debug then
-                          begin
-                             for i:=1 to maxvarregs do
-                               begin
-                                  if assigned(regvars[i]) then
-                                   Message3(cg_d_register_weight,reg2str(regvars[i]^.reg),
-                                           tostr(regvars[i]^.refs),regvars[i]^.name);
-                               end;
-                          end;
-                     end;
-                end;
-              if assigned(aktprocsym) and
-                 ((aktprocsym^.definition^.options and poinline)<>0) then
-                make_const_global:=true;
-              do_secondpass(p);
-
-{$ifdef StoreFPULevel}
-              procinfo.def^.fpu_used:=p^.registersfpu;
-{$endif StoreFPULevel}
-              { all registers can be used again }
-              usableregs:=[R_EAX,R_EBX,R_ECX,R_EDX];
-{$ifdef SUPPORT_MMX}
-              usableregs:=usableregs+[R_MM0..R_MM6];
-{$endif SUPPORT_MMX}
-              c_usableregs:=4;
-           end;
-         procinfo.aktproccode^.concatlist(exprasmlist);
-         make_const_global:=false;
-      end;
-
-end.
-{
-  $Log$
-  Revision 1.53  1998-09-07 18:46:03  peter
-    * update smartlinking, uses getdatalabel
-    * renamed ptree.value vars to value_str,value_real,value_set
-
-  Revision 1.52  1998/09/05 23:03:58  florian
-    * some fixes to get -Or work:
-      - inc/dec didn't take care of CREGISTER
-      - register calculcation of inc/dec was wrong
-      - var/const parameters get now assigned 32 bit register, but
-        const parameters only if they are passed by reference !
-
-  Revision 1.51  1998/08/31 12:22:14  peter
-    * secondinline moved to cg386inl
-
-  Revision 1.50  1998/08/28 10:54:20  peter
-    * fixed smallset generation from elements, it has never worked before!
-
-  Revision 1.49  1998/08/19 16:07:42  jonas
-    * changed optimizer switches + cleanup of DestroyRefs in daopt386.pas
-
-  Revision 1.48  1998/08/14 18:18:43  peter
-    + dynamic set contruction
-    * smallsets are now working (always longint size)
-
-  Revision 1.47  1998/08/10 14:49:53  peter
-    + localswitches, moduleswitches, globalswitches splitting
-
-  Revision 1.46  1998/08/10 10:18:23  peter
-    + Compiler,Comphook unit which are the new interface units to the
-      compiler
-
-  Revision 1.45  1998/07/30 13:30:34  florian
-    * final implemenation of exception support, maybe it needs
-      some fixes :)
-
-  Revision 1.44  1998/07/30 11:18:15  florian
-    + first implementation of try ... except on .. do end;
-    * limitiation of 65535 bytes parameters for cdecl removed
-
-  Revision 1.43  1998/07/28 21:52:50  florian
-    + implementation of raise and try..finally
-    + some misc. exception stuff
-
-  Revision 1.42  1998/07/15 16:06:44  jonas
-  * fixed bug that caused the stackframe never to be omitted
-
-  Revision 1.41  1998/07/14 14:46:44  peter
-    * released NEWINPUT
-
-  Revision 1.40  1998/07/07 11:19:52  peter
-    + NEWINPUT for a better inputfile and scanner object
-
-  Revision 1.39  1998/06/12 10:32:23  pierre
-    * column problem hopefully solved
-    + C vars declaration changed
-
-  Revision 1.38  1998/06/09 16:01:37  pierre
-    + added procedure directive parsing for procvars
-      (accepted are popstack cdecl and pascal)
-    + added C vars with the following syntax
-      var C calias 'true_c_name';(can be followed by external)
-      reason is that you must add the Cprefix
-
-      which is target dependent
-
-  Revision 1.37  1998/06/08 13:13:41  pierre
-    + temporary variables now in temp_gen.pas unit
-      because it is processor independent
-    * mppc68k.bat modified to undefine i386 and support_mmx
-      (which are defaults for i386)
-
-  Revision 1.36  1998/06/05 17:49:54  peter
-    * cleanup of cgai386
-
-  Revision 1.35  1998/06/05 16:13:32  pierre
-    * fix for real and string consts inside inlined procs
-
-  Revision 1.34  1998/06/05 14:37:27  pierre
-    * fixes for inline for operators
-    * inline procedure more correctly restricted
-
-  Revision 1.33  1998/06/04 23:51:37  peter
-    * m68k compiles
-    + .def file creation moved to gendef.pas so it could also be used
-      for win32
-
-  Revision 1.32  1998/06/04 09:55:35  pierre
-    * demangled name of procsym reworked to become independant of the mangling scheme
-
-  Revision 1.31  1998/06/03 22:48:52  peter
-    + wordbool,longbool
-    * rename bis,von -> high,low
-    * moved some systemunit loading/creating to psystem.pas
-
-  Revision 1.30  1998/06/02 17:03:00  pierre
-    *  with node corrected for objects
-    * small bugs for SUPPORT_MMX fixed
-
-  Revision 1.29  1998/06/01 16:50:18  peter
-    + boolean -> ord conversion
-    * fixed ord -> boolean conversion
-
-  Revision 1.28  1998/05/28 17:26:47  peter
-    * fixed -R switch, it didn't work after my previous akt/init patch
-    * fixed bugs 110,130,136
-
-  Revision 1.27  1998/05/25 17:11:38  pierre
-    * firstpasscount bug fixed
-      now all is already set correctly the first time
-      under EXTDEBUG try -gp to skip all other firstpasses
-      it works !!
-    * small bug fixes
-      - for smallsets with -dTESTSMALLSET
-      - some warnings removed (by correcting code !)
-
-  Revision 1.26  1998/05/23 01:21:03  peter
-    + aktasmmode, aktoptprocessor, aktoutputformat
-    + smartlink per module $SMARTLINK-/+ (like MMX) and moved to aktswitches
-    + $LIBNAME to set the library name where the unit will be put in
-    * splitted cgi386 a bit (codeseg to large for bp7)
-    * nasm, tasm works again. nasm moved to ag386nsm.pas
-
-  Revision 1.25  1998/05/21 19:33:31  peter
-    + better procedure directive handling and only one table
-
-  Revision 1.24  1998/05/20 09:42:33  pierre
-    + UseTokenInfo now default
-    * unit in interface uses and implementation uses gives error now
-    * only one error for unknown symbol (uses lastsymknown boolean)
-      the problem came from the label code !
-    + first inlined procedures and function work
-      (warning there might be allowed cases were the result is still wrong !!)
-    * UseBrower updated gives a global list of all position of all used symbols
-      with switch -gb
-
-  Revision 1.23  1998/05/12 10:46:58  peter
-    * moved printstatus to verb_def
-    + V_Normal which is between V_Error and V_Warning and doesn't have a
-      prefix like error: warning: and is included in V_Default
-    * fixed some messages
-    * first time parameter scan is only for -v and -T
-    - removed old style messages
-
-  Revision 1.22  1998/05/07 00:17:00  peter
-    * smartlinking for sets
-    + consts labels are now concated/generated in hcodegen
-    * moved some cpu code to cga and some none cpu depended code from cga
-      to tree and hcodegen and cleanup of hcodegen
-    * assembling .. output reduced for smartlinking ;)
-
-  Revision 1.21  1998/05/06 08:38:36  pierre
-    * better position info with UseTokenInfo
-      UseTokenInfo greatly simplified
-    + added check for changed tree after first time firstpass
-      (if we could remove all the cases were it happen
-      we could skip all firstpass if firstpasscount > 1)
-      Only with ExtDebug
-
-  Revision 1.20  1998/05/01 16:38:44  florian
-    * handling of private and protected fixed
-    + change_keywords_to_tp implemented to remove
-      keywords which aren't supported by tp
-    * break and continue are now symbols of the system unit
-    + widestring, longstring and ansistring type released
-
-  Revision 1.19  1998/04/30 15:59:39  pierre
-    * GDB works again better :
-      correct type info in one pass
-    + UseTokenInfo for better source position
-    * fixed one remaining bug in scanner for line counts
-    * several little fixes
-
-  Revision 1.18  1998/04/29 10:33:48  pierre
-    + added some code for ansistring (not complete nor working yet)
-    * corrected operator overloading
-    * corrected nasm output
-    + started inline procedures
-    + added starstarn : use ** for exponentiation (^ gave problems)
-    + started UseTokenInfo cond to get accurate positions
-
-  Revision 1.17  1998/04/27 23:10:27  peter
-    + new scanner
-    * $makelib -> if smartlink
-    * small filename fixes pmodule.setfilename
-    * moved import from files.pas -> import.pas
-
-  Revision 1.16  1998/04/23 21:52:08  florian
-    * fixes of Jonas applied
-
-  Revision 1.15  1998/04/22 21:06:49  florian
-    * last fixes before the release:
-      - veryyyy slow firstcall fixed
-
-  Revision 1.14  1998/04/21 10:16:47  peter
-    * patches from strasbourg
-    * objects is not used anymore in the fpc compiled version
-
-  Revision 1.13  1998/04/14 23:27:02  florian
-    + exclude/include with constant second parameter added
-
-  Revision 1.12  1998/04/13 21:15:41  florian
-    * error handling of pass_1 and cgi386 fixed
-    * the following bugs fixed: 0117, 0118, 0119 and 0129, 0122 was already
-      fixed, verified
-
-  Revision 1.11  1998/04/13 08:42:51  florian
-    * call by reference and call by value open arrays fixed
-
-  Revision 1.10  1998/04/12 22:39:43  florian
-    * problem with read access to properties solved
-    * correct handling of hidding methods via virtual (COM)
-    * correct result type of constructor calls (COM), the resulttype
-      depends now on the type of the class reference
-
-  Revision 1.9  1998/04/10 21:36:55  florian
-    + some stuff to support method pointers (procedure of object) added
-      (declaration, parameter handling)
-
-  Revision 1.8  1998/04/09 22:16:33  florian
-    * problem with previous REGALLOC solved
-    * improved property support
-
-  Revision 1.7  1998/04/09 14:28:05  jonas
-    + basic k6 and 6x86 optimizing support (-O7 and -O8)
-
-  Revision 1.6  1998/04/08 11:34:20  peter
-    * nasm works (linux only tested)
-
-  Revision 1.5  1998/04/07 22:45:04  florian
-    * bug0092, bug0115 and bug0121 fixed
-    + packed object/class/array
-
-  Revision 1.4  1998/04/07 13:19:42  pierre
-    * bugfixes for reset_gdb_info
-      in MEM parsing for go32v2
-      better external symbol creation
-      support for rhgdb.exe (lowercase file names)
-}

+ 7 - 6
compiler/daopt386.pas

@@ -190,10 +190,7 @@ Var
 
 Implementation
 
-Uses globals, systems, strings, verbose, hcodegen,
-   {$ifdef i386}
-     cgi386;
-   {$endif i386}
+Uses globals, systems, strings, verbose, hcodegen;
 
 Const AsmInstr: Array[tasmop] Of TAsmInstrucProp = (
    {MOV} (Ch: (C_Op2, C_None, C_None)),
@@ -591,7 +588,7 @@ Procedure FindLoHiLabels(AsmL: PAasmOutput; Var LowLabel, HighLabel, LabelDif: L
 {Walks through the paasmlist to find the lowest and highest label number;
  Since 0.9.3: also removes unused labels}
 Var LabelFound: Boolean;
-    P, hp1: Pai;
+    P{, hp1}: Pai;
 Begin
   LabelFound := False;
   LowLabel := MaxLongint;
@@ -1472,7 +1469,11 @@ End.
 
 {
  $Log$
- Revision 1.12  1998-09-16 18:00:01  jonas
+ Revision 1.13  1998-09-17 09:42:36  peter
+   + pass_2 for cg386
+   * Message() -> CGMessage() for pass_1/pass_2
+
+ Revision 1.12  1998/09/16 18:00:01  jonas
    * optimizer now completely dependant on GetNext/GetLast instruction, works again with -dRegAlloc
 
  Revision 1.11  1998/09/15 14:05:27  jonas

+ 13 - 9
compiler/hcodegen.pas

@@ -122,10 +122,10 @@ unit hcodegen;
        codegenerror : boolean;
 
     { message calls with codegenerror support }
-    procedure message(const t : tmsgconst);
-    procedure message1(const t : tmsgconst;const s : string);
-    procedure message2(const t : tmsgconst;const s1,s2 : string);
-    procedure message3(const t : tmsgconst;const s1,s2,s3 : string);
+    procedure cgmessage(const t : tmsgconst);
+    procedure cgmessage1(const t : tmsgconst;const s : string);
+    procedure cgmessage2(const t : tmsgconst;const s1,s2 : string);
+    procedure cgmessage3(const t : tmsgconst;const s1,s2,s3 : string);
 
 
     { initialize respectively terminates the code generator }
@@ -167,7 +167,7 @@ implementation
             override the message calls to set codegenerror
 *****************************************************************************}
 
-    procedure message(const t : tmsgconst);
+    procedure cgmessage(const t : tmsgconst);
       var
          olderrorcount : longint;
       begin
@@ -179,7 +179,7 @@ implementation
            end;
       end;
 
-    procedure message1(const t : tmsgconst;const s : string);
+    procedure cgmessage1(const t : tmsgconst;const s : string);
       var
          olderrorcount : longint;
       begin
@@ -191,7 +191,7 @@ implementation
            end;
       end;
 
-    procedure message2(const t : tmsgconst;const s1,s2 : string);
+    procedure cgmessage2(const t : tmsgconst;const s1,s2 : string);
       var
          olderrorcount : longint;
       begin
@@ -203,7 +203,7 @@ implementation
            end;
       end;
 
-    procedure message3(const t : tmsgconst;const s1,s2,s3 : string);
+    procedure cgmessage3(const t : tmsgconst;const s1,s2,s3 : string);
       var
          olderrorcount : longint;
       begin
@@ -383,7 +383,11 @@ end.
 
 {
   $Log$
-  Revision 1.16  1998-09-07 18:46:04  peter
+  Revision 1.17  1998-09-17 09:42:37  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.16  1998/09/07 18:46:04  peter
     * update smartlinking, uses getdatalabel
     * renamed ptree.value vars to value_str,value_real,value_set
 

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 129 - 125
compiler/pass_1.pas


+ 24 - 12
compiler/pass_2.pas

@@ -108,12 +108,12 @@ implementation
          exprasmlist^.concatlist(p^.p_asm);
          if not p^.object_preserved then
           begin
-{$ifdef i386}   
+{$ifdef i386}
             maybe_loadesi;
 {$endif}
 {$ifdef m68k}
             maybe_loada5;
-{$endif}        
+{$endif}
           end;
        end;
 
@@ -215,7 +215,7 @@ implementation
             codegenerror:=false;
             procedures[p^.treetype](p);
             p^.error:=codegenerror;
-        
+
             codegenerror:=codegenerror or oldcodegenerror;
             aktlocalswitches:=oldlocalswitches;
             aktfilepos:=oldpos;
@@ -290,7 +290,6 @@ implementation
       var
          i       : longint;
          regsize : topsize;
-         regi    : tregister;
          hr      : preference;
       label
          nextreg;
@@ -388,22 +387,31 @@ implementation
                                   dec(c_usableregs);
 
                                   { possibly no 32 bit register are needed }
-                                  if  (regvars[i]^.definition^.deftype=orddef) and
+                                  { call by reference/const ? }
+                                  if (regvars[i]^.varspez=vs_var) or
+                                     ((regvars[i]^.varspez=vs_const) and
+                                      dont_copy_const_param(regvars[i]^.definition)) then
+                                    begin
+                                       regvars[i]^.reg:=varregs[i];
+                                       regsize:=S_L;
+                                    end
+                                  else
+                                   if (regvars[i]^.definition^.deftype=orddef) and
                                       (porddef(regvars[i]^.definition)^.typ in [bool8bit,uchar,u8bit,s8bit]) then
                                     begin
-{$ifdef i386}                           
+{$ifdef i386}
 
                                        regvars[i]^.reg:=reg32toreg8(varregs[i]);
-{$endif}                                
+{$endif}
                                        regsize:=S_B;
                                     end
                                   else if  (regvars[i]^.definition^.deftype=orddef) and
                                            (porddef(regvars[i]^.definition)^.typ in [bool16bit,u16bit,s16bit]) then
                                     begin
-{$ifdef i386}                           
+{$ifdef i386}
 
                                        regvars[i]^.reg:=reg32toreg16(varregs[i]);
-{$endif}                                
+{$endif}
                                        regsize:=S_W;
                                     end
                                   else
@@ -429,7 +437,7 @@ implementation
 {$ifdef m68k}
                                        procinfo.aktentrycode^.concat(new(pai68k,op_ref_reg(A_MOVE,regsize,
                                          hr,regvars[i]^.reg)));
-{$endif m68k}                                   
+{$endif m68k}
 
                                        unused:=unused - [regvars[i]^.reg];
                                     end;
@@ -439,7 +447,7 @@ implementation
 {$endif i386}
 {$ifdef m68k}
                                   usedinproc:=usedinproc or ($800 shr word(varregs[i]));
-{$endif m68k}                                   
+{$endif m68k}
 
                                end;
                              nextreg:
@@ -475,7 +483,11 @@ implementation
 end.
 {
   $Log$
-  Revision 1.2  1998-09-07 18:46:07  peter
+  Revision 1.3  1998-09-17 09:42:40  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.2  1998/09/07 18:46:07  peter
     * update smartlinking, uses getdatalabel
     * renamed ptree.value vars to value_str,value_real,value_set
 

+ 55 - 29
compiler/pp.pas

@@ -114,6 +114,7 @@ uses
   {$O globals}
   {$O hcodegen}
   {$O pass_1}
+  {$O pass_2}
   {$O tree}
   {$O types}
   {$O objects}
@@ -153,45 +154,66 @@ uses
   {$endif gdb}
   {$ifdef i386}
         {$O opts386}
-        {$O cgi386}
+        {$O i386}
+        {$O cgai386}
+        {$O tgeni386}
         {$O cg386add}
         {$O cg386cal}
         {$O cg386cnv}
         {$O cg386con}
         {$O cg386flw}
         {$O cg386ld}
+        {$O cg386inl}
         {$O cg386mat}
         {$O cg386set}
-{$ifndef NOOPT}
-        {$O aopt386}
-{$endif NOOPT}
-        {$O cgai386}
-        {$O i386}
-{$IfNDef Nora386dir}
-        {$O ra386dir}
-{$endif Nora386dir}
-{$IfNDef Nora386int}
-        {$O ra386int}
-{$endif Nora386int}
-{$IfNDef Nora386att}
-        {$O ra386att}
-{$endif Nora386att}
-        {$O tgeni386}
-{$ifndef NoAg386Int}
-        {$O ag386int}
-{$endif NoAg386Int}
-        {$O ag386att}
-{$ifndef NoAg386Nsm}
-        {$O ag386nsm}
-{$endif}
+        {$ifndef NOOPT}
+          {$O aopt386}
+        {$endif}
+        {$IfNDef Nora386dir}
+          {$O ra386dir}
+        {$endif}
+        {$IfNDef Nora386int}
+          {$O ra386int}
+        {$endif}
+        {$IfNDef Nora386att}
+          {$O ra386att}
+        {$endif}
+        {$ifndef NoAg386Int}
+          {$O ag386int}
+        {$endif}
+        {$ifndef NoAg386Att}
+          {$O ag386att}
+        {$endif}
+        {$ifndef NoAg386Nsm}
+          {$O ag386nsm}
+        {$endif}
   {$endif}
   {$ifdef m68k}
         {$O opts68k}
-        {$O cg68k}
-        {$O ra68kmot}
-        {$O ag68kgas}
-        {$O ag68kmot}
-        {$O ag68kmit}
+        {$O m68k}
+        {$O cga68k}
+        {$O tgen68k}
+        {$O cg68kadd}
+        {$O cg68kcal}
+        {$O cg68kcnv}
+        {$O cg68kcon}
+        {$O cg68kflw}
+        {$O cg68kld}
+        {$O cg68kinl}
+        {$O cg68kmat}
+        {$O cg68kset}
+        {$IfNDef Nora68kMot}
+          {$O ra68kmot}
+        {$endif}
+        {$IfNDef Noag68kGas}
+          {$O ag68kgas}
+        {$endif}
+        {$IfNDef Noag68kMot}
+          {$O ag68kmot}
+        {$endif}
+        {$IfNDef Noag68kMit}
+          {$O ag68kmit}
+        {$endif}
   {$endif}
 {$endif useoverlay}
 
@@ -234,7 +256,11 @@ begin
 end.
 {
   $Log$
-  Revision 1.28  1998-08-26 15:31:17  peter
+  Revision 1.29  1998-09-17 09:42:41  peter
+    + pass_2 for cg386
+    * Message() -> CGMessage() for pass_1/pass_2
+
+  Revision 1.28  1998/08/26 15:31:17  peter
     * heapblocks for >0.99.5
 
   Revision 1.27  1998/08/11 00:00:00  peter

Vissa filer visades inte eftersom för många filer har ändrats