浏览代码

- logs removed

mazen 23 年之前
父节点
当前提交
5ed8dfb74c
共有 1 个文件被更改,包括 108 次插入266 次删除
  1. 108 266
      compiler/sparc/cga.pas

+ 108 - 266
compiler/sparc/cga.pas

@@ -1,18 +1,7 @@
-{*****************************************************************************}
-{ File                   : cga.pas                                            }
-{ Author                 : Mazen NEIFER                                       }
-{ Project                : Free Pascal Compiler (FPC)                         }
-{ Creation date          : 2002\26\26                                         }
-{ Last modification date : 2002\07\13                                         }
-{ Licence                : GPL                                                }
-{ Bug report             : [email protected]                        }
-{*****************************************************************************}
-{
+{******************************************************************************
     $Id$
     $Id$
     Copyright (c) 1998-2002 by Florian Klaempfl
     Copyright (c) 1998-2002 by Florian Klaempfl
 
 
-    Helper routines for the i386 code generator
-
     This program is free software; you can redistribute it and/or modify
     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
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
     the Free Software Foundation; either version 2 of the License, or
@@ -27,274 +16,127 @@
     along with this program; if not, write to the Free Software
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 
- ****************************************************************************
-}
-
+ *****************************************************************************}
 unit cga;
 unit cga;
-
-{$i fpcdefs.inc}
-
+{$INCLUDE fpcdefs.inc}
 interface
 interface
-
-    uses
-       cpuinfo,cpubase,cginfo,
-       symconst,symtype,symdef,aasmbase,aasmtai,aasmcpu;
-
-{$define TESTGETTEMP to store const that
- are written into temps for later release PM }
-
-    function def_opsize(p1:tdef):topsize;
-    function def_getreg(p1:tdef):tregister;
-
-    procedure emitjmp(c : tasmcond;var l : tasmlabel);
-
-    procedure emit_none(i : tasmop;s : topsize);
-
-    procedure emit_const(i : tasmop;s : topsize;c : longint);
-    procedure emit_reg(i : tasmop;s : topsize;reg : tregister);
-    procedure emit_ref(i : tasmop;s : topsize;const ref : treference);
-
-    procedure emit_const_reg(i : tasmop;s : topsize;c : longint;reg : tregister);
-    procedure emit_const_ref(i : tasmop;s : topsize;c : longint;const ref : treference);
-    procedure emit_ref_reg(i : tasmop;s : topsize;const ref : treference;reg : tregister);
-    procedure emit_reg_ref(i : tasmop;s : topsize;reg : tregister;const ref : treference);
-    procedure emit_reg_reg(i : tasmop;s : topsize;reg1,reg2 : tregister);
-
-    procedure emit_const_reg_reg(i : tasmop;s : topsize;c : longint;reg1,reg2 : tregister);
-    procedure emit_reg_reg_reg(i : tasmop;s : topsize;reg1,reg2,reg3 : tregister);
-
-
-    procedure emit_sym(i : tasmop;s : topsize;op : tasmsymbol);
-
-
+uses
+  cpuinfo,cpubase,cginfo,
+  symconst,symtype,symdef,aasmbase,aasmtai,aasmcpu;
+{$define TESTGETTEMP to store const that are written into temps for later release PM }
+function def_opsize(p1:tdef):topsize;
+function def_getreg(p1:tdef):tregister;
+procedure emitjmp(c:tasmcond;var l:tasmlabel);
+procedure emit_none(i:tasmop;s:topsize);
+procedure emit_const(i:tasmop;s:topsize;c:longint);
+procedure emit_reg(i:tasmop;s:topsize;reg:tregister);
+procedure emit_ref(i:tasmop;s:topsize;const ref:treference);
+procedure emit_const_reg(i:tasmop;s:topsize;c:longint;reg:tregister);
+procedure emit_const_ref(i:tasmop;s:topsize;c:longint;const ref:treference);
+procedure emit_ref_reg(i:tasmop;s:topsize;const ref:treference;reg:tregister);
+procedure emit_reg_ref(i:tasmop;s:topsize;reg:tregister;const ref:treference);
+procedure emit_reg_reg(i:tasmop;s:topsize;reg1,reg2:tregister);
+procedure emit_const_reg_reg(i:tasmop;s:topsize;c:longint;reg1,reg2:tregister);
+procedure emit_reg_reg_reg(i:tasmop;s:topsize;reg1,reg2,reg3:tregister);
+procedure emit_sym(i:tasmop;s:topsize;op:tasmsymbol);
 implementation
 implementation
-
-    uses
-       cutils,
-       systems,globals,verbose,
-       cgbase,cgobj,tgobj,rgobj,rgcpu;
-
-
+uses
+  cutils,
+  systems,globals,verbose,
+  cgbase,cgobj,tgobj,rgobj,rgcpu;
 {*****************************************************************************
 {*****************************************************************************
                                 Helpers
                                 Helpers
 *****************************************************************************}
 *****************************************************************************}
-
-    function def_opsize(p1:tdef):topsize;
-      begin
-        case p1.size of
-         1 : def_opsize:=S_B;
-         2 : def_opsize:=S_W;
-         4 : def_opsize:=S_L;
-         { I don't know if we need it (FK) }
-         8 : def_opsize:=S_L;
-        else
-         internalerror(130820001);
-        end;
-      end;
-
-
-    function def_getreg(p1:tdef):tregister;
-      begin
-        def_getreg:=rg.makeregsize(rg.getregisterint(exprasmlist),int_cgsize(p1.size));
-      end;
-
-
+function def_opsize(p1:tdef):topsize;
+  begin
+    case p1.size of
+      1:def_opsize:=S_B;
+      2:def_opsize:=S_W;
+      4:def_opsize:=S_L;
+      8:def_opsize:=S_L;
+      else
+        InternalError(130820001);
+    end;
+  end;
+function def_getreg(p1:tdef):tregister;
+  begin
+    with rg do
+      def_getreg:=makeregsize(getregisterint(exprasmlist),int_cgsize(p1.size));
+  end;
 {*****************************************************************************
 {*****************************************************************************
                               Emit Assembler
                               Emit Assembler
 *****************************************************************************}
 *****************************************************************************}
-
-    procedure emitjmp(c : tasmcond;var l : tasmlabel);
-      var
-        ai : taicpu;
-      begin
-        if c=C_None then
-          ai := Taicpu.Op_sym(A_JMPL,S_NO,l)
-        else
-          begin
-            ai:=Taicpu.Op_sym(A_JMPL,S_NO,l);
-            ai.SetCondition(c);
-          end;
-        ai.is_jmp:=true;
-        exprasmList.concat(ai);
-      end;
-
-
-    procedure emit_none(i : tasmop;s : topsize);
-      begin
-         exprasmList.concat(Taicpu.Op_none(i,s));
-      end;
-
-    procedure emit_reg(i : tasmop;s : topsize;reg : tregister);
-      begin
-         exprasmList.concat(Taicpu.Op_reg(i,s,reg));
-      end;
-
-    procedure emit_ref(i : tasmop;s : topsize;const ref : treference);
-      begin
-         exprasmList.concat(Taicpu.Op_ref(i,s,ref));
-      end;
-
-    procedure emit_const(i : tasmop;s : topsize;c : longint);
+procedure emitjmp(c:tasmcond;var l:tasmlabel);
+  var
+    ai:taicpu;
+  begin
+    if c=C_None
+    then
+      ai:= Taicpu.Op_sym(A_JMPL,S_NO,l)
+    else
       begin
       begin
-         exprasmList.concat(Taicpu.Op_const(i,s,aword(c)));
+        ai:=Taicpu.Op_sym(A_JMPL,S_NO,l);
+        ai.SetCondition(c);
       end;
       end;
-
-    procedure emit_const_reg(i : tasmop;s : topsize;c : longint;reg : tregister);
-      begin
-         exprasmList.concat(Taicpu.Op_const_reg(i,s,aword(c),reg));
-      end;
-
-    procedure emit_const_ref(i : tasmop;s : topsize;c : longint;const ref : treference);
-      begin
-         exprasmList.concat(Taicpu.Op_const_ref(i,s,aword(c),ref));
-      end;
-
-    procedure emit_ref_reg(i : tasmop;s : topsize;const ref : treference;reg : tregister);
-      begin
-         exprasmList.concat(Taicpu.Op_ref_reg(i,s,ref,reg));
-      end;
-
-    procedure emit_reg_ref(i : tasmop;s : topsize;reg : tregister;const ref : treference);
-      begin
-         exprasmList.concat(Taicpu.Op_reg_ref(i,s,reg,ref));
-      end;
-
-PROCEDURE emit_reg_reg(i:tasmop;s:topsize;reg1,reg2:tregister);
-  BEGIN
-    IF reg1<>reg2
-    THEN
+    ai.is_jmp:=true;
+    exprasmList.concat(ai);
+  end;
+procedure emit_none(i:tasmop;s:topsize);
+  begin
+    exprasmList.concat(Taicpu.Op_none(i,s));
+  end;
+procedure emit_reg(i:tasmop;s:topsize;reg:tregister);
+  begin
+    exprasmList.concat(Taicpu.Op_reg(i,s,reg));
+  end;
+procedure emit_ref(i:tasmop;s:topsize;const ref:treference);
+  begin
+    exprasmList.concat(Taicpu.Op_ref(i,s,ref));
+  end;
+procedure emit_const(i:tasmop;s:topsize;c:longint);
+  begin
+    exprasmList.concat(Taicpu.Op_const(i,s,aword(c)));
+  end;
+procedure emit_const_reg(i:tasmop;s:topsize;c:longint;reg:tregister);
+  begin
+    exprasmList.concat(Taicpu.Op_const_reg(i,s,aword(c),reg));
+  end;
+procedure emit_const_ref(i:tasmop;s:topsize;c:longint;const ref:treference);
+  begin
+    exprasmList.concat(Taicpu.Op_const_ref(i,s,aword(c),ref));
+  end;
+procedure emit_ref_reg(i:tasmop;s:topsize;const ref:treference;reg:tregister);
+  begin
+    exprasmList.concat(Taicpu.Op_ref_reg(i,s,ref,reg));
+  end;
+procedure emit_reg_ref(i:tasmop;s:topsize;reg:tregister;const ref:treference);
+  begin
+    exprasmList.concat(Taicpu.Op_reg_ref(i,s,reg,ref));
+  end;
+procedure emit_reg_reg(i:tasmop;s:topsize;reg1,reg2:tregister);
+  begin
+    if reg1<>reg2
+    then
       exprasmList.concat(Taicpu.Op_reg_reg(i,s,reg1,reg2));
       exprasmList.concat(Taicpu.Op_reg_reg(i,s,reg1,reg2));
-  END;
-
-    procedure emit_const_reg_reg(i : tasmop;s : topsize;c : longint;reg1,reg2 : tregister);
-      begin
-         exprasmList.concat(Taicpu.Op_reg_const_reg(i,s,reg1,c,reg2));
-      end;
-
-    procedure emit_reg_reg_reg(i : tasmop;s : topsize;reg1,reg2,reg3 : tregister);
-      begin
-         exprasmList.concat(Taicpu.Op_reg_reg_reg(i,s,reg1,reg2,reg3));
-      end;
-
-    procedure emit_sym(i : tasmop;s : topsize;op : tasmsymbol);
-      begin
-        exprasmList.concat(Taicpu.Op_sym(i,s,op));
-      end;
-
+  end;
+procedure emit_const_reg_reg(i:tasmop;s:topsize;c:longint;reg1,reg2:tregister);
+  begin
+    exprasmList.concat(Taicpu.Op_reg_const_reg(i,s,reg1,c,reg2));
+  end;
+procedure emit_reg_reg_reg(i:tasmop;s:topsize;reg1,reg2,reg3:tregister);
+  begin
+    exprasmList.concat(Taicpu.Op_reg_reg_reg(i,s,reg1,reg2,reg3));
+  end;
+procedure emit_sym(i:tasmop;s:topsize;op:tasmsymbol);
+  begin
+    exprasmList.concat(Taicpu.Op_sym(i,s,op));
+  end;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.1  2002-08-22 08:30:50  mazen
-  first insertion 2002\08\22
-
-  Revision 1.32  2002/05/18 13:34:21  peter
-    * readded missing revisions
-
-  Revision 1.31  2002/05/16 19:46:50  carl
-  + defines.inc -> fpcdefs.inc to avoid conflicts if compiling by hand
-  + try to fix temp allocation (still in ifdef)
-  + generic constructor calls
-  + start of tassembler / tmodulebase class cleanup
-
-  Revision 1.29  2002/05/13 19:54:37  peter
-    * removed n386ld and n386util units
-    * maybe_save/maybe_restore added instead of the old maybe_push
-
-  Revision 1.28  2002/05/12 16:53:16  peter
-    * moved entry and exitcode to ncgutil and cgobj
-    * foreach gets extra argument for passing local data to the
-      iterator function
-    * -CR checks also class typecasts at runtime by changing them
-      into as
-    * fixed compiler to cycle with the -CR option
-    * fixed stabs with elf writer, finally the global variables can
-      be watched
-    * removed a lot of routines from cga unit and replaced them by
-      calls to cgobj
-    * u32bit-s32bit updates for and,or,xor nodes. When one element is
-      u32bit then the other is typecasted also to u32bit without giving
-      a rangecheck warning/error.
-    * fixed pascal calling method with reversing also the high tree in
-      the parast, detected by tcalcst3 test
-
-  Revision 1.27  2002/04/25 20:16:39  peter
-    * moved more routines from cga/n386util
-
-  Revision 1.26  2002/04/21 15:29:53  carl
-  * changeregsize -> rg.makeregsize
-
-  Revision 1.25  2002/04/20 21:37:07  carl
-  + generic FPC_CHECKPOINTER
-  + first parameter offset in stack now portable
-  * rename some constants
-  + move some cpu stuff to other units
-  - remove unused constents
-  * fix stacksize for some targets
-  * fix generic size problems which depend now on EXTEND_SIZE constant
-  * removing frame pointer in routines is only available for : i386,m68k and vis targets
-
-  Revision 1.24  2002/04/19 15:39:34  peter
-    * removed some more routines from cga
-    * moved location_force_reg/mem to ncgutil
-    * moved arrayconstructnode secondpass to ncgld
-
-  Revision 1.23  2002/04/15 19:44:20  peter
-    * fixed stackcheck that would be called recursively when a stack
-      error was found
-    * generic changeregsize(reg,size) for i386 register resizing
-    * removed some more routines from cga unit
-    * fixed returnvalue handling
-    * fixed default stacksize of linux and go32v2, 8kb was a bit small :-)
-
-  Revision 1.22  2002/04/14 20:54:17  carl
-  + stack checking enabled for all targets (it is simulated now)
-
-  Revision 1.21  2002/04/04 19:06:08  peter
-    * removed unused units
-    * use tlocation.size in cg.a_*loc*() routines
-
-  Revision 1.20  2002/04/04 18:30:22  carl
-  + added wdosx support (patch from Pavel)
-
-  Revision 1.19  2002/04/02 17:11:33  peter
-    * tlocation,treference update
-    * LOC_CONSTANT added for better constant handling
-    * secondadd splitted in multiple routines
-    * location_force_reg added for loading a location to a register
-      of a specified size
-    * secondassignment parses now first the right and then the left node
-      (this is compatible with Kylix). This saves a lot of push/pop especially
-      with string operations
-    * adapted some routines to use the new cg methods
-
-  Revision 1.18  2002/03/31 20:26:37  jonas
-    + a_loadfpu_* and a_loadmm_* methods in tcg
-    * register allocation is now handled by a class and is mostly processor
-      independent (+rgobj.pas and i386/rgcpu.pas)
-    * temp allocation is now handled by a class (+tgobj.pas, -i386\tgcpu.pas)
-    * some small improvements and fixes to the optimizer
-    * some register allocation fixes
-    * some fpuvaroffset fixes in the unary minus node
-    * push/popusedregisters is now called rg.save/restoreusedregisters and
-      (for i386) uses temps instead of push/pop's when using -Op3 (that code is
-      also better optimizable)
-    * fixed and optimized register saving/restoring for new/dispose nodes
-    * LOC_FPU locations now also require their "register" field to be set to
-      R_ST, not R_ST0 (the latter is used for LOC_CFPUREGISTER locations only)
-    - list field removed of the tnode class because it's not used currently
-      and can cause hard-to-find bugs
-
-  Revision 1.17  2002/03/28 16:07:52  armin
-  + initialize threadvars defined local in units
-
-  Revision 1.16  2002/03/04 19:10:12  peter
-    * removed compiler warnings
-
-  Revision 1.15  2002/01/24 18:25:53  peter
-   * implicit result variable generation for assembler routines
-   * removed m_tp modeswitch, use m_tp7 or not(m_fpc) instead
-
-  Revision 1.14  2002/01/19 14:21:17  peter
-    * fixed init/final for value parameters
+  Revision 1.2  2002-10-13 19:47:34  mazen
+  - logs removed
 
 
+  Revision 1.1  2002/08/22 08:30:50  mazen
+  first insertion 2002\08\22
 }
 }