Am 25.02.2015 um 20:37 schrieb Alfred:
Well. About the non compatible. I can only detect these:
1)
RTTICount: Word; //$FFFF if there is no further info, or the value of Count I did not see it set to $FFFF in case of missing RTTI. As Delphi reportedly does.
But perhaps this has already been done somewhere else.
But, in my opinion, this is not of much importance
In my opinion this is never the case the way the RTTI is currently generated so this shouldn't be an issue.
2)
Properties are in front of methods.
This is different from Delphi.
But I know that this cannot be changed.
That would break a whole lot of code !
And again, if you are aware of this: no problems at all.

Here the opinion of others would be nice, since the RTTI was partly generated but not added to "typinfo.pas".
Original:
tkInterface:
              (
               IntfParent: PTypeInfo;
               IntfFlags : TIntfFlagsBase;
               GUID: TGUID;
               IntfUnit: ShortString;
               {
               IntfProps: array of TPropInfo;
               }
              );
//useless since you would not know how many properties there are
Current:
tkInterface:
              (
               IntfParent: PTypeInfo;
               IntfFlags : TIntfFlagsBase;
               GUID: TGUID;
               IntfUnit: ShortString;
               {
               IntfPropCount: Word;
               IntfProps: array[0..IntfPropCount-1] of TPropInfo;
               IntfMethTable : TIntfMethodTable;
               }
              );
//I simply assumed this to be the easier change. Still would break some code, if property RTTI for interfaces was ever used anywhere.

How would the layout in Delphi look like?

And I am willing to test on simple ARM (Pi[2], BBB).
If you provide me with code !
It seemed simple enough see attached Patch.
ParReg: r0-r3=0..3

mfg Steve
>From 8a8b253e779dcad74559ee2b39a4e9ec7c1aa3ba Mon Sep 17 00:00:00 2001
From: Steve Hildebrandt <[email protected]>
Date: Wed, 25 Feb 2015 21:10:03 +0100
Subject: [PATCH 6/6] Updated paramgr implementation for arm

---
 compiler/arm/cpupara.pas | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/compiler/arm/cpupara.pas b/compiler/arm/cpupara.pas
index a917850..fd6fc6d 100644
--- a/compiler/arm/cpupara.pas
+++ b/compiler/arm/cpupara.pas
@@ -36,6 +36,7 @@ unit cpupara;
           function get_volatile_registers_int(calloption : 
tproccalloption):tcpuregisterset;override;
           function get_volatile_registers_fpu(calloption : 
tproccalloption):tcpuregisterset;override;
           function get_volatile_registers_mm(calloption : 
tproccalloption):tcpuregisterset;override;
+          procedure get_para_regoff(proccalloption: tproccalloption; paraloc: 
pcgparalocation; out reg: Byte; out off: LongInt);override;
           function push_addr_param(varspez:tvarspez;def : tdef;calloption : 
tproccalloption) : boolean;override;
           function ret_in_param(def:tdef;pd:tabstractprocdef):boolean;override;
           procedure getintparaloc(pd : tabstractprocdef; nr : longint; var 
cgpara : tcgpara);override;
@@ -79,6 +80,25 @@ unit cpupara;
         result:=VOLATILE_MMREGISTERS;
       end;
 
+    procedure tarmparamanager.get_para_regoff(proccalloption: tproccalloption; 
paraloc: pcgparalocation; out reg: Byte; out off: LongInt);
+    var
+      I : SizeInt;
+    begin
+      with paraloc^ do
+        case loc of
+          LOC_REGISTER:
+            begin
+              reg:=getsupreg(register)-RS_R0;
+              off:=0;
+            end;
+          LOC_REFERENCE:
+            begin
+              reg:=255;
+              off:=reference.offset;
+            end;
+        end;
+    end;
+
 
     procedure tarmparamanager.getintparaloc(pd : tabstractprocdef; nr : 
longint; var cgpara : tcgpara);
       var
-- 
1.9.5.msysgit.0

_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to