Browse Source

* bug #519 fixed

florian 26 years ago
parent
commit
656d4330cd

+ 21 - 1
compiler/cg386inl.pas

@@ -1310,6 +1310,23 @@ implementation
                         end;
                    end;
               end;
+{$ifdef SUPPORT_MMX}
+            in_mmx_pcmpeqb..in_mmx_pcmpgtw:
+              begin
+                 if p^.left^.location.loc=LOC_REGISTER then
+                   begin
+                      {!!!!!!!}
+                   end
+                 else if p^.left^.left^.location.loc=LOC_REGISTER then
+                   begin
+                      {!!!!!!!}
+                   end
+                 else
+                   begin
+                      {!!!!!!!}
+                   end;
+              end;
+{$endif SUPPORT_MMX}
             else internalerror(9);
          end;
          { reset pushedparasize }
@@ -1319,7 +1336,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.68  1999-08-19 13:08:47  pierre
+  Revision 1.69  1999-08-28 15:34:16  florian
+    * bug 519 fixed
+
+  Revision 1.68  1999/08/19 13:08:47  pierre
    * emit_??? used
 
   Revision 1.67  1999/08/10 13:21:08  pierre

+ 17 - 1
compiler/cg386ld.pas

@@ -376,6 +376,8 @@ implementation
          r : preference;
          ai : paicpu;
          op : tasmop;
+         pushed : boolean;
+
       begin
          otlabel:=truelabel;
          oflabel:=falselabel;
@@ -388,6 +390,10 @@ implementation
          if codegenerror then
            exit;
 
+{$ifdef dummy}
+         { we use now the standard mechanism via maybe_push/restore
+           to do that (FK)
+         }
          case p^.left^.location.loc of
             LOC_REFERENCE : begin
                               { in case left operator uses to register }
@@ -421,6 +427,8 @@ implementation
                   exit;
                end;
          end;
+{$endif dummy}
+         loc:=p^.left^.location.loc;
          { lets try to optimize this (PM)            }
          { define a dest_loc that is the location      }
          { and a ptree to verify that it is the right }
@@ -434,7 +442,12 @@ implementation
            end;
 {$endif test_dest_loc}
 
+         { left can't be never a 64 bit LOC_REGISTER, so the 3. arg }
+         { can be false                                             }
+         pushed:=maybe_push(p^.right^.registers32,p^.left,false);
          secondpass(p^.right);
+         if pushed then restore(p^.left,false);
+
          if codegenerror then
            exit;
 
@@ -965,7 +978,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.80  1999-08-26 20:24:37  michael
+  Revision 1.81  1999-08-28 15:34:17  florian
+    * bug 519 fixed
+
+  Revision 1.80  1999/08/26 20:24:37  michael
   + Hopefuly last fixes for resourcestrings
 
   Revision 1.79  1999/08/25 16:41:05  peter

+ 7 - 2
compiler/cgai386.pas

@@ -1138,7 +1138,9 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
          else
            begin
               reset_reference(p^.location.reference);
-              p^.location.reference.index:=hregister;
+              { any reasons why this was moved into the index register ? }
+              { normally usage of base register is much better (FK)      }
+              p^.location.reference.base:=hregister;
               set_location(p^.left^.location,p^.location);
            end;
 {$ifdef TEMPS_NOT_PUSH}
@@ -3287,7 +3289,10 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister);
 end.
 {
   $Log$
-  Revision 1.31  1999-08-25 11:59:55  jonas
+  Revision 1.32  1999-08-28 15:34:17  florian
+    * bug 519 fixed
+
+  Revision 1.31  1999/08/25 11:59:55  jonas
     * changed pai386, paippc and paiapha (same for tai*) to paicpu (taicpu)
 
   Revision 1.30  1999/08/19 13:06:45  pierre

+ 5 - 2
compiler/cpubase.pas

@@ -1045,7 +1045,7 @@ end;
                               Instruction table
 *****************************************************************************}
 
-procedure DoneCpu;{$ifndef FPC}far;{$endif}
+procedure DoneCpu;
 begin
   {exitproc:=saveexit; }
 {$ifndef NOAG386BIN}
@@ -1086,7 +1086,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.9  1999-08-19 20:05:09  michael
+  Revision 1.10  1999-08-28 15:34:19  florian
+    * bug 519 fixed
+
+  Revision 1.9  1999/08/19 20:05:09  michael
   + Fixed ifdef NOAG386BIN bug
 
   Revision 1.8  1999/08/19 13:02:10  pierre

+ 20 - 1
compiler/innr.inc

@@ -73,9 +73,28 @@ const
    in_const_sin        = 116;
    in_lo_qword         = 117;
    in_hi_qword         = 118;
+
+{ MMX functions }
+{ these contants are used by the mmx unit }
+
+   { MMX }
+   in_mmx_pcmpeqb      = 200;
+   in_mmx_pcmpeqw      = 201;
+   in_mmx_pcmpeqd      = 202;
+   in_mmx_pcmpgtb      = 203;
+   in_mmx_pcmpgtw      = 204;
+   in_mmx_pcmpgtd      = 205;
+
+   { 3DNow }
+
+   { SSE }
+
 {
   $Log$
-  Revision 1.12  1999-07-01 15:49:14  florian
+  Revision 1.13  1999-08-28 15:34:19  florian
+    * bug 519 fixed
+
+  Revision 1.12  1999/07/01 15:49:14  florian
     * int64/qword type release
     + lo/hi for int64/qword
 

+ 5 - 2
compiler/options.pas

@@ -1012,7 +1012,7 @@ begin
 {$endif}
 { Temporary defines, until things settle down }
   def_symbol('INT64');
-  def_symbol('HASRESOURCESTRINGS');
+  { not yet !!!!!!! def_symbol('HASRESOURCESTRINGS'); }
   def_symbol('HASSAVEREGISTERS');
   def_symbol('NEWVMTOFFSET');
 
@@ -1184,7 +1184,10 @@ end;
 end.
 {
   $Log$
-  Revision 1.16  1999-08-27 10:45:03  pierre
+  Revision 1.17  1999-08-28 15:34:19  florian
+    * bug 519 fixed
+
+  Revision 1.16  1999/08/27 10:45:03  pierre
    options -Ca sets simply_ppu to true
 
   Revision 1.15  1999/08/25 22:51:00  pierre

+ 5 - 2
compiler/pmodules.pas

@@ -135,7 +135,7 @@ unit pmodules;
             end;
           hp:=Pused_unit(hp^.next);
           end;
-        // Add program resources, if any
+        { Add program resources, if any }
         If ResourceStringList<>Nil then
           begin
           ResourceStringTables.concat(new(pai_const_symbol,initname(Current_Module^.modulename^+'_RESOURCESTRINGLIST')));
@@ -1449,7 +1449,10 @@ unit pmodules;
 end.
 {
   $Log$
-  Revision 1.148  1999-08-27 14:53:00  pierre
+  Revision 1.149  1999-08-28 15:34:19  florian
+    * bug 519 fixed
+
+  Revision 1.148  1999/08/27 14:53:00  pierre
    * double checksum problem solved
 
   Revision 1.147  1999/08/27 10:57:56  pierre

+ 12 - 1
compiler/pp.pas

@@ -39,6 +39,9 @@
   NOAG386INT          no Intel Assembler output
   NOAG386NSM          no NASM output
   NOAG386BIN          leaves out the binary writer
+  LOGMEMBLOCKS        adds memory manager which logs the size of
+                      each allocated memory block, the information
+                      is written to memuse.log after compiling
   -----------------------------------------------------------------
 
   Required switches for a i386 compiler be compiled by Free Pascal Compiler:
@@ -120,6 +123,11 @@ uses
 {$endif}
 {$endif FPC}
   globals,compiler
+{$ifdef logmemblocks}
+{$ifdef fpc}
+  ,memlog
+{$endif fpc}
+{$endif logmemblocks}
   ;
 
 {$ifdef useoverlay}
@@ -271,7 +279,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.45  1999-08-04 00:23:18  florian
+  Revision 1.46  1999-08-28 15:34:20  florian
+    * bug 519 fixed
+
+  Revision 1.45  1999/08/04 00:23:18  florian
     * renamed i386asm and i386base to cpuasm and cpubase
 
   Revision 1.44  1999/06/02 22:44:13  pierre

+ 9 - 1
compiler/tcinl.pas

@@ -1081,6 +1081,11 @@ implementation
                     CGMessage(type_e_varid_or_typeid_expected);
                end;
 
+{$ifdef SUPPORT_MMX}
+            in_mmx_pcmpeqb..in_mmx_pcmpgtw:
+              begin
+              end;
+{$endif SUPPORT_MMX}
             in_assert_x_y :
                begin
                  p^.resulttype:=voiddef;
@@ -1121,7 +1126,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.48  1999-08-23 23:41:04  pierre
+  Revision 1.49  1999-08-28 15:34:21  florian
+    * bug 519 fixed
+
+  Revision 1.48  1999/08/23 23:41:04  pierre
    * in_inc_x register allocation corrected
 
   Revision 1.47  1999/08/06 12:43:13  jonas