Browse Source

* m68k updates

peter 24 years ago
parent
commit
802acf6940
8 changed files with 249 additions and 2347 deletions
  1. 8 12
      rtl/i386/rttip.inc
  2. 201 0
      rtl/inc/genrtti.inc
  3. 0 2314
      rtl/inc/graph/fontdata.inc
  4. 5 10
      rtl/inc/heaptrc.pp
  5. 12 1
      rtl/inc/int64.inc
  6. 6 3
      rtl/inc/real2str.inc
  7. 7 1
      rtl/inc/rtti.inc
  8. 10 6
      rtl/inc/systemh.inc

+ 8 - 12
rtl/i386/rttip.inc

@@ -17,6 +17,7 @@
 { I think we should use the pascal version, this code isn't     }
 { I think we should use the pascal version, this code isn't     }
 { much faster                                                   }
 { much faster                                                   }
 
 
+{$define FPC_SYSTEM_HAS_FPC_INITIALIZE}
 Procedure Initialize (Data,TypeInfo : pointer);[Public,Alias:'FPC_INITIALIZE'];assembler;
 Procedure Initialize (Data,TypeInfo : pointer);[Public,Alias:'FPC_INITIALIZE'];assembler;
 asm
 asm
 // Save registers
 // Save registers
@@ -131,6 +132,7 @@ asm
 end;
 end;
 
 
 
 
+{$define FPC_SYSTEM_HAS_FPC_FINALIZE}
 Procedure int_finalize (Data,TypeInfo: Pointer);[Public,Alias:'FPC_FINALIZE'];assembler;
 Procedure int_finalize (Data,TypeInfo: Pointer);[Public,Alias:'FPC_FINALIZE'];assembler;
 asm
 asm
         push    %eax
         push    %eax
@@ -244,6 +246,7 @@ asm
 end;
 end;
 
 
 
 
+{$define FPC_SYSTEM_HAS_FPC_ADDREF}
 Procedure Addref (Data,TypeInfo : Pointer); [Public,alias : 'FPC_ADDREF'];Assembler;
 Procedure Addref (Data,TypeInfo : Pointer); [Public,alias : 'FPC_ADDREF'];Assembler;
 asm
 asm
 // Save registers
 // Save registers
@@ -358,6 +361,7 @@ asm
 end;
 end;
 
 
 
 
+{$define FPC_SYSTEM_HAS_FPC_DECREF}
 Procedure DecRef (Data,TypeInfo : Pointer); [Public,alias : 'FPC_DECREF'];Assembler;
 Procedure DecRef (Data,TypeInfo : Pointer); [Public,alias : 'FPC_DECREF'];Assembler;
 asm
 asm
 // Save registers
 // Save registers
@@ -470,20 +474,12 @@ asm
         pop     %eax
         pop     %eax
 end;
 end;
 
 
-procedure FinalizeArray(data,typeinfo : pointer;count,size : longint);
-  [Public,Alias:'FPC_FINALIZEARRAY'];
-
-  var
-     i : longint;
-
-  begin
-     for i:=0 to count-1 do
-       int_finalize(data+size*i,typeinfo);
-  end;
-
 {
 {
   $Log$
   $Log$
-  Revision 1.7  2000-11-09 17:49:34  florian
+  Revision 1.8  2001-04-23 18:25:44  peter
+    * m68k updates
+
+  Revision 1.7  2000/11/09 17:49:34  florian
     + FPC_FINALIZEARRAY
     + FPC_FINALIZEARRAY
     * Finalize to int_finalize renamed
     * Finalize to int_finalize renamed
 
 

+ 201 - 0
rtl/inc/genrtti.inc

@@ -0,0 +1,201 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 1999-2000 by xxxx
+    member of the Free Pascal development team
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    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.
+
+ **********************************************************************}
+
+{ Run-Time type information routines - processor dependent part }
+
+
+{$ifndef FPC_SYSTEM_HAS_FPC_INITIALIZE}
+Procedure Initialize (Data,TypeInfo : pointer);[Public,Alias : 'FPC_INITIALIZE'];
+
+{ this definition is sometimes (depending on switches)
+  already defined or not so define it locally to avoid problems PM }
+Type
+    Pbyte = ^Byte;
+Var Temp       : PByte;
+    I          : longint;
+    Size,Count : longint;
+    TInfo : Pointer;
+
+begin
+  Temp:=PByte(TypeInfo);
+  case temp^ of
+    tkAstring,tkWstring : PPchar(Data)^:=Nil;
+    tkArray :
+      begin
+      temp:=Temp+1;
+      I:=temp^;
+      temp:=temp+(I+1);               // skip name string;
+      Size:=PArrayRec(Temp)^.Size;     // get element size
+      Count:=PArrayRec(Temp)^.Count;  // get element Count
+      TInfo:=PArrayRec(Temp)^.Info;   // Get element info
+      For I:=0 to Count-1 do
+        Initialize (Data+(I*size),TInfo);
+      end;
+    tkrecord :
+      begin
+      Temp:=Temp+1;
+      I:=Temp^;
+      temp:=temp+(I+1);             // skip name string;
+      Size:=PRecRec(Temp)^.Size;    // get record size; not needed.
+      Count:=PRecRec(Temp)^.Count;  // get element Count
+      For I:=1 to count Do
+        With PRecRec(Temp)^.elements[I] do
+          Initialize (Data+Offset,Info);
+      end;
+  end;
+end;
+{$endif}
+
+{$ifndef FPC_SYSTEM_HAS_FPC_FINALIZE}
+Procedure Finalize (Data,TypeInfo: Pointer);[Public,Alias : 'FPC_FINALIZE'];
+
+{ this definition is sometimes (depending on switches)
+  already defined or not so define it locally to avoid problems PM }
+Type
+    Pbyte = ^Byte;
+Var Temp       : PByte;
+    I          : longint;
+    Size,Count : longint;
+    TInfo : Pointer;
+
+begin
+  Temp:=PByte(TypeInfo);
+  case temp^ of
+    tkAstring,tkWstring : AnsiStr_Decr_Ref(Data);
+    tkArray :
+      begin
+      Temp:=Temp+1;
+      I:=temp^;
+      temp:=temp+(I+1);               // skip name string;
+      Size:=PArrayRec(Temp)^.Size;     // get element size
+      Count:=PArrayRec(Temp)^.Count;  // get element Count
+      TInfo:=PArrayRec(Temp)^.Info;   // Get element info
+      For I:=0 to Count-1 do
+        Finalize (Data+(I*size),TInfo);
+      end;
+    tkrecord :
+      begin
+      Temp:=Temp+1;
+      I:=Temp^;
+      temp:=temp+(I+1);             // skip name string;
+      Size:=PRecRec(Temp)^.Size;    // get record size; not needed.
+      Count:=PRecRec(Temp)^.Count;  // get element Count
+      For I:=1 to count do
+        With PRecRec(Temp)^.elements[I] do
+          Finalize (Data+Offset,Info);
+      end;
+  end;
+end;
+{$endif}
+
+{$ifndef FPC_SYSTEM_HAS_FPC_ADDREF}
+Procedure Addref (Data,TypeInfo : Pointer); [Public,alias : 'FPC_ADDREF'];
+
+{ this definition is sometimes (depending on switches)
+  already defined or not so define it locally to avoid problems PM }
+Type
+    Pbyte = ^Byte;
+Var Temp       : PByte;
+    I          : longint;
+    Size,Count : longint;
+    TInfo : Pointer;
+
+begin
+  Temp:=PByte(TypeInfo);
+  case temp^ of
+    tkAstring,tkWstring : AnsiStr_Incr_Ref(Data);
+    tkArray :
+      begin
+      Temp:=Temp+1;
+      I:=temp^;
+      temp:=temp+(I+1);               // skip name string;
+      Size:=PArrayRec(Temp)^.Size;     // get element size
+      Count:=PArrayRec(Temp)^.Count;  // get element Count
+      TInfo:=PArrayRec(Temp)^.Info;   // Get element info
+      For I:=0 to Count-1 do
+        AddRef (Data+(I*size),TInfo);
+      end;
+    tkrecord :
+      begin
+      Temp:=Temp+1;
+      I:=Temp^;
+      temp:=temp+(I+1);             // skip name string;
+      Size:=PRecRec(Temp)^.Size;    // get record size; not needed.
+      Count:=PRecRec(Temp)^.Count;  // get element Count
+      For I:=1 to count do
+        With PRecRec(Temp)^.elements[I] do
+          AddRef (Data+Offset,Info);
+      end;
+  end;
+end;
+{$endif}
+
+{$ifndef FPC_SYSTEM_HAS_FPC_DECREF}
+Procedure DecRef (Data, TypeInfo : Pointer);[Public,alias : 'FPC_DECREF'];
+{ this definition is sometimes (depending on switches)
+  already defined or not so define it locally to avoid problems PM }
+Type
+    Pbyte = ^Byte;
+Var Temp       : PByte;
+    I          : longint;
+    Size,Count : longint;
+    TInfo : Pointer;
+
+begin
+  Temp:=PByte(TypeInfo);
+  case temp^ of
+    tkAstring,tkWstring : AnsiStr_Decr_Ref(Data);
+    tkArray :
+      begin
+      Temp:=Temp+1;
+      I:=temp^;
+      temp:=temp+(I+1);               // skip name string;
+      Size:=PArrayRec(Temp)^.Size;     // get element size
+      Count:=PArrayRec(Temp)^.Count;  // get element Count
+      TInfo:=PArrayRec(Temp)^.Info;   // Get element info
+      For I:=0 to Count-1 do
+        DecRef (Data+(I*size),TInfo);
+      end;
+    tkrecord :
+      begin
+      Temp:=Temp+1;
+      I:=Temp^;
+      temp:=temp+(I+1);             // skip name string;
+      Size:=PRecRec(Temp)^.Size;    // get record size; not needed.
+      Count:=PRecRec(Temp)^.Count;  // get element Count
+      For I:=1 to count do
+        With PRecRec(Temp)^.elements[I] do
+          DecRef (Data+Offset,Info);
+      end;
+  end;
+end;
+{$endif}
+
+{$ifndef FPC_SYSTEM_HAS_FPC_FINALIZEARRAY}
+procedure FinalizeArray(data,typeinfo : pointer;count,size : longint); [Public,Alias:'FPC_FINALIZEARRAY'];
+  var
+     i : longint;
+  begin
+     for i:=0 to count-1 do
+       int_finalize(data+size*i,typeinfo);
+  end;
+{$endif}
+
+{
+ $Log$
+ Revision 1.2  2001-04-23 18:25:44  peter
+   * m68k updates
+
+}

File diff suppressed because it is too large
+ 0 - 2314
rtl/inc/graph/fontdata.inc


+ 5 - 10
rtl/inc/heaptrc.pp

@@ -719,7 +719,7 @@ var
    data_end : cardinal;external name '__data_end__';
    data_end : cardinal;external name '__data_end__';
 {$endif}
 {$endif}
 
 
-procedure CheckPointer(p : pointer);[public, alias : 'FPC_CHECKPOINTER'];
+procedure CheckPointer(p : pointer);[saveregisters, public, alias : 'FPC_CHECKPOINTER'];
 var
 var
   i  : longint;
   i  : longint;
   pp : pheap_mem_info;
   pp : pheap_mem_info;
@@ -728,9 +728,6 @@ var
 label
 label
   _exit;
   _exit;
 begin
 begin
-  asm
-     pushal
-  end;
   if p=nil then
   if p=nil then
     goto _exit;
     goto _exit;
 
 
@@ -835,11 +832,6 @@ begin
   writeln(ptext^,'pointer $',hexstr(longint(p),8),' does not point to valid memory block');
   writeln(ptext^,'pointer $',hexstr(longint(p),8),' does not point to valid memory block');
   runerror(204);
   runerror(204);
 _exit:
 _exit:
-  asm
-     popal
-     { avoid 386DX popad bug }
-     nop
-  end;
 end;
 end;
 
 
 {*****************************************************************************
 {*****************************************************************************
@@ -1154,7 +1146,10 @@ finalization
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.12  2001-04-21 12:18:09  peter
+  Revision 1.13  2001-04-23 18:25:44  peter
+    * m68k updates
+
+  Revision 1.12  2001/04/21 12:18:09  peter
     * add nop after popa (merged)
     * add nop after popa (merged)
 
 
   Revision 1.11  2001/04/13 18:05:34  peter
   Revision 1.11  2001/04/13 18:05:34  peter

+ 12 - 1
rtl/inc/int64.inc

@@ -115,12 +115,15 @@
       var
       var
          sign : boolean;
          sign : boolean;
          q1,q2 : qword;
          q1,q2 : qword;
+{$ifdef SUPPORT_COMP}
          c : comp;
          c : comp;
+{$endif}
 
 
       begin
       begin
          if n=0 then
          if n=0 then
            HandleErrorFrame(200,get_frame);
            HandleErrorFrame(200,get_frame);
          { can the fpu do the work? }
          { can the fpu do the work? }
+{$ifdef support_comp}
          if fpuint64 then
          if fpuint64 then
            begin
            begin
               // the c:=comp(...) is necessary to shut up the compiler
               // the c:=comp(...) is necessary to shut up the compiler
@@ -128,6 +131,7 @@
               divint64:=qword(c);
               divint64:=qword(c);
            end
            end
          else
          else
+{$endif}
            begin
            begin
               sign:=false;
               sign:=false;
               if z<0 then
               if z<0 then
@@ -262,9 +266,12 @@
       var
       var
          sign : boolean;
          sign : boolean;
          q1,q2,q3 : qword;
          q1,q2,q3 : qword;
+{$ifdef support_comp}
          c : comp;
          c : comp;
+{$endif}
 
 
       begin
       begin
+{$ifdef support_comp}
          { can the fpu do the work ? }
          { can the fpu do the work ? }
          if fpuint64 and not(checkoverflow) then
          if fpuint64 and not(checkoverflow) then
            begin
            begin
@@ -273,6 +280,7 @@
               mulint64:=int64(c);
               mulint64:=int64(c);
            end
            end
          else
          else
+{$endif}
            begin
            begin
               sign:=false;
               sign:=false;
               if f1<0 then
               if f1<0 then
@@ -477,7 +485,10 @@
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.9  2001-04-13 22:30:04  peter
+  Revision 1.10  2001-04-23 18:25:45  peter
+    * m68k updates
+
+  Revision 1.9  2001/04/13 22:30:04  peter
     * remove warnings
     * remove warnings
 
 
   Revision 1.8  2001/03/03 12:39:09  jonas
   Revision 1.8  2001/03/03 12:39:09  jonas

+ 6 - 3
rtl/inc/real2str.inc

@@ -85,7 +85,7 @@ var
     until carry = 0;
     until carry = 0;
   end;
   end;
 
 
-  procedure getIntPart(d: extended);
+  procedure getIntPart(d: valreal);
   var
   var
     intPartStack: TIntPartStack;
     intPartStack: TIntPartStack;
     stackPtr, endStackPtr, digits: longint;
     stackPtr, endStackPtr, digits: longint;
@@ -403,7 +403,10 @@ end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.2  2000-07-13 11:33:45  michael
+  Revision 1.3  2001-04-23 18:25:45  peter
+    * m68k updates
+
+  Revision 1.2  2000/07/13 11:33:45  michael
   + removed logs
   + removed logs
- 
+
 }
 }

+ 7 - 1
rtl/inc/rtti.inc

@@ -85,11 +85,17 @@ TArrayRec = record
 
 
 { The actual Routines are implemented per processor. }
 { The actual Routines are implemented per processor. }
 
 
+{ Include the cpu dependant part }
 {$i rttip.inc}
 {$i rttip.inc}
+{ Include the generic part }
+{$i genrtti.inc}
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.3  2000-10-21 18:20:17  florian
+  Revision 1.4  2001-04-23 18:25:45  peter
+    * m68k updates
+
+  Revision 1.3  2000/10/21 18:20:17  florian
     * a lot of small changes:
     * a lot of small changes:
        - setlength is internal
        - setlength is internal
        - win32 graph unit extended
        - win32 graph unit extended

+ 10 - 6
rtl/inc/systemh.inc

@@ -76,6 +76,7 @@ Type
   ValReal = Real;
   ValReal = Real;
 
 
   {$define SUPPORT_SINGLE}
   {$define SUPPORT_SINGLE}
+  {$define SUPPORT_DOUBLE}
 {$endif}
 {$endif}
 
 
 { Zero - terminated strings }
 { Zero - terminated strings }
@@ -153,14 +154,14 @@ const
 
 
 { Compatibility With  TP }
 { Compatibility With  TP }
 const
 const
+  { code to use comps in int64mul and div code is commented out! (JM) }
+  FPUInt64 : boolean = false; { set this to false if you don't want that }
+                              { the fpu does int64*int64 and             }
+                              { int64 div int64, if the * is overflow    }
+                              { checked, it is done in software          }
 {$ifdef i386}
 {$ifdef i386}
   Test8086 : byte = 2;       { Always i386 or newer }
   Test8086 : byte = 2;       { Always i386 or newer }
   Test8087 : byte = 3;       { Always 387 or newer. Emulated if needed. }
   Test8087 : byte = 3;       { Always 387 or newer. Emulated if needed. }
-  { code to use comps in int64mul and div code is commented out! (JM) }
-  FPUInt64 : boolean = false; { set this to false if you don't want that }
-                             { the fpu does int64*int64 and             }
-                             { int64 div int64, if the * is overflow    }
-                             { checked, it is done in software          }
 {$endif i386}
 {$endif i386}
 {$ifdef m68k}
 {$ifdef m68k}
   Test68000 : byte = 0;      { Must be determined at startup for both }
   Test68000 : byte = 0;      { Must be determined at startup for both }
@@ -491,7 +492,10 @@ const
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.19  2001-04-13 18:06:07  peter
+  Revision 1.20  2001-04-23 18:25:45  peter
+    * m68k updates
+
+  Revision 1.19  2001/04/13 18:06:07  peter
     * upcase, lowercase for ansistring
     * upcase, lowercase for ansistring
 
 
   Revision 1.18  2001/03/22 23:26:05  florian
   Revision 1.18  2001/03/22 23:26:05  florian

Some files were not shown because too many files changed in this diff