[fpc-devel] RTTI interface & variant late binding issue (mORMot)
Steve Hildebrandt
Steve.Kassel at web.de
Wed Feb 25 22:15:57 CET 2015
Am 25.02.2015 um 22:05 schrieb Steve Hildebrandt:
>
> Am 25.02.2015 um 21:12 schrieb Steve Hildebrandt:
>>
>> Am 25.02.2015 um 20:37 schrieb Alfred:
>>> 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
> Forgot to commit some parts of it sorry.
> Also if reg < 255 and off > 0 it is the offset for the register.
> For example reg=0 and off=4 means upper 32 bit of the mm register 0.
>
> Since this is all experimetal and there is no convention to uphold for
> the values ParaReg and ParaOff
> I'm open to suggestions.
mfg Steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20150225/f25a1db8/attachment.html>
-------------- next part --------------
>From 71c5379096304cb42abe22c776e813b81d1a65fd Mon Sep 17 00:00:00 2001
From: Steve Hildebrandt <Steve.Kassel at web.de>
Date: Wed, 25 Feb 2015 21:10:03 +0100
Subject: [PATCH 6/6] Updated paramgr implementation for arm
---
compiler/arm/cpupara.pas | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/compiler/arm/cpupara.pas b/compiler/arm/cpupara.pas
index a917850..120808d 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,44 @@ 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_FPUREGISTER:
+ begin
+ reg:=getsupreg(register)-RS_F0;
+ off:=0;
+ end;
+ LOC_MMREGISTER:
+ begin
+ reg:=getsupreg(register);
+ if reg < RS_S1 then
+ begin
+ reg-=RS_D0;
+ off:=0;
+ end
+ else
+ begin
+ reg-=RS_S1;
+ off:=4;
+ end;
+ 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
More information about the fpc-devel
mailing list