From dc22fe78633d6c3af5396e494c66fb47b1f81514 Mon Sep 17 00:00:00 2001 From: florian Date: Thu, 21 Aug 2003 23:23:59 +0000 Subject: [PATCH] * continued to work on the arm skeleton --- compiler/arm/cpunode.pas | 12 ++-- compiler/arm/narmcnv.pas | 143 +++++++++++++++++++++++++++++++++++++++ compiler/arm/narmmat.pas | 79 +++++++++++++++++++++ 3 files changed, 229 insertions(+), 5 deletions(-) create mode 100644 compiler/arm/narmcnv.pas create mode 100644 compiler/arm/narmmat.pas diff --git a/compiler/arm/cpunode.pas b/compiler/arm/cpunode.pas index 10ccb06171..fe45931bf2 100644 --- a/compiler/arm/cpunode.pas +++ b/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 diff --git a/compiler/arm/narmcnv.pas b/compiler/arm/narmcnv.pas new file mode 100644 index 0000000000..2e39bb7e4c --- /dev/null +++ b/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 +} diff --git a/compiler/arm/narmmat.pas b/compiler/arm/narmmat.pas new file mode 100644 index 0000000000..e621b0d67b --- /dev/null +++ b/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 +} +