瀏覽代碼

* continued to work on the arm skeleton

florian 22 年之前
父節點
當前提交
dc22fe7863
共有 3 個文件被更改,包括 229 次插入5 次删除
  1. 7 5
      compiler/arm/cpunode.pas
  2. 143 0
      compiler/arm/narmcnv.pas
  3. 79 0
      compiler/arm/narmmat.pas

+ 7 - 5
compiler/arm/cpunode.pas

@@ -35,17 +35,19 @@ unit cpunode;
          the processor specific nodes must be included
          after the generic one (FK)
        }
-       narmadd
+       narmadd,
 //!!!       narminl,
-       { this not really a node }
-//!!!       narmmat,
-//!!!       narmcnv
+       narmmat,
+       narmcnv
        ;
 
 end.
 {
   $Log$
-  Revision 1.2  2003-08-21 03:14:00  florian
+  Revision 1.3  2003-08-21 23:24:08  florian
+    * continued to work on the arm skeleton
+
+  Revision 1.2  2003/08/21 03:14:00  florian
     * arm compiler can be compiled; far from being working
 
   Revision 1.1  2003/07/21 16:35:30  florian

+ 143 - 0
compiler/arm/narmcnv.pas

@@ -0,0 +1,143 @@
+{
+    $Id$
+    Copyright (c) 1998-2002 by Florian Klaempfl
+
+    Generate ARM assembler for type converting nodes
+
+    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.
+
+ ****************************************************************************
+}
+unit narmcnv;
+
+{$i fpcdefs.inc}
+
+interface
+
+    uses
+      node,ncnv,ncgcnv,defcmp;
+
+    type
+       tarmtypeconvnode = class(tcgtypeconvnode)
+         protected
+         { procedure second_int_to_int;override; }
+         { procedure second_string_to_string;override; }
+         { procedure second_cstring_to_pchar;override; }
+         { procedure second_string_to_chararray;override; }
+         { procedure second_array_to_pointer;override; }
+         // function first_int_to_real: tnode; override;
+         { procedure second_pointer_to_array;override; }
+         { procedure second_chararray_to_string;override; }
+         { procedure second_char_to_string;override; }
+           procedure second_int_to_real;override;
+         // procedure second_real_to_real;override;
+         { procedure second_cord_to_pointer;override; }
+         { procedure second_proc_to_procvar;override; }
+         { procedure second_bool_to_int;override; }
+           procedure second_int_to_bool;override;
+         { procedure second_load_smallset;override;  }
+         { procedure second_ansistring_to_pchar;override; }
+         { procedure second_pchar_to_string;override; }
+         { procedure second_class_to_intf;override; }
+         { procedure second_char_to_char;override; }
+           procedure second_call_helper(c : tconverttype); override;
+       end;
+
+implementation
+
+   uses
+      verbose,globals,systems,
+      symconst,symdef,aasmbase,aasmtai,
+      defutil,
+      cgbase,pass_1,pass_2,
+      ncon,ncal,
+      ncgutil,
+      cpubase,aasmcpu,
+      rgobj,tgobj,cgobj,cginfo;
+
+
+    procedure tarmtypeconvnode.second_int_to_real;
+      begin
+      end;
+
+
+    procedure tarmtypeconvnode.second_int_to_bool;
+      begin
+      end;
+
+
+    procedure tarmtypeconvnode.second_call_helper(c : tconverttype);
+
+      const
+         secondconvert : array[tconverttype] of pointer = (
+           @second_nothing, {equal}
+           @second_nothing, {not_possible}
+           @second_nothing, {second_string_to_string, handled in resulttype pass }
+           @second_char_to_string,
+           @second_nothing, {char_to_charray}
+           @second_nothing, { pchar_to_string, handled in resulttype pass }
+           @second_nothing, {cchar_to_pchar}
+           @second_cstring_to_pchar,
+           @second_ansistring_to_pchar,
+           @second_string_to_chararray,
+           @second_nothing, { chararray_to_string, handled in resulttype pass }
+           @second_array_to_pointer,
+           @second_pointer_to_array,
+           @second_int_to_int,
+           @second_int_to_bool,
+           @second_bool_to_int, { bool_to_bool }
+           @second_bool_to_int,
+           @second_real_to_real,
+           @second_int_to_real,
+           @second_nothing, { real_to_currency, handled in resulttype pass }
+           @second_proc_to_procvar,
+           @second_nothing, { arrayconstructor_to_set }
+           @second_nothing, { second_load_smallset, handled in first pass }
+           @second_cord_to_pointer,
+           @second_nothing, { interface 2 string }
+           @second_nothing, { interface 2 guid   }
+           @second_class_to_intf,
+           @second_char_to_char,
+           @second_nothing,  { normal_2_smallset }
+           @second_nothing,   { dynarray_2_openarray }
+           @second_nothing,
+           @second_nothing,  { variant_2_dynarray }
+           @second_nothing   { dynarray_2_variant}
+         );
+      type
+         tprocedureofobject = procedure of object;
+
+      var
+         r : packed record
+                proc : pointer;
+                obj : pointer;
+             end;
+
+      begin
+         { this is a little bit dirty but it works }
+         { and should be quite portable too        }
+         r.proc:=secondconvert[c];
+         r.obj:=self;
+         tprocedureofobject(r){$ifdef FPC}();{$endif FPC}
+      end;
+
+begin
+   ctypeconvnode:=tarmtypeconvnode;
+end.
+{
+  $Log$
+  Revision 1.1  2003-08-21 23:24:08  florian
+    * continued to work on the arm skeleton
+}

+ 79 - 0
compiler/arm/narmmat.pas

@@ -0,0 +1,79 @@
+{
+    $Id$
+    Copyright (c) 1998-2002 by Florian Klaempfl
+
+    Generate ARM assembler for math nodes
+
+    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.
+
+ ****************************************************************************
+}
+unit narmmat;
+
+{$i fpcdefs.inc}
+
+interface
+
+    uses
+      node,nmat,ncgmat;
+
+    type
+      tarmmoddivnode = class(tmoddivnode)
+         procedure pass_2;override;
+      end;
+
+      tarmshlshrnode = class(tshlshrnode)
+         procedure pass_2;override;
+      end;
+
+implementation
+
+    uses
+      globtype,systems,
+      cutils,verbose,globals,
+      symconst,symdef,
+      aasmbase,aasmcpu,aasmtai,
+      defutil,
+      cgbase,cgobj,pass_1,pass_2,
+      ncon,
+      cpubase,cpuinfo,cginfo,
+      ncgutil,cgcpu,cg64f32,rgobj;
+
+{*****************************************************************************
+                             TARMMODDIVNODE
+*****************************************************************************}
+
+    procedure tarmmoddivnode.pass_2;
+      begin
+      end;
+
+{*****************************************************************************
+                             TARMSHLRSHRNODE
+*****************************************************************************}
+
+    procedure tarmshlshrnode.pass_2;
+      begin
+      end;
+
+begin
+   cmoddivnode:=tarmmoddivnode;
+   cshlshrnode:=tarmshlshrnode;
+end.
+{
+  $Log$
+  Revision 1.1  2003-08-21 23:23:59  florian
+    * continued to work on the arm skeleton
+}
+