|
@@ -67,6 +67,7 @@ unit parabase;
|
|
|
Alignment : ShortInt;
|
|
|
Size : TCGSize; { Size of the parameter included in all locations }
|
|
|
Def : tdef; { Type of the parameter }
|
|
|
+ DefDeref : tderef;
|
|
|
{$ifdef powerpc}
|
|
|
composite: boolean; { under the AIX abi, how certain parameters are passed depends on whether they are composite or not }
|
|
|
{$endif powerpc}
|
|
@@ -78,6 +79,8 @@ unit parabase;
|
|
|
function add_location:pcgparalocation;
|
|
|
procedure get_location(var newloc:tlocation);
|
|
|
|
|
|
+ procedure buildderef;
|
|
|
+ procedure deref;
|
|
|
procedure ppuwrite(ppufile:tcompilerppufile);
|
|
|
procedure ppuload(ppufile:tcompilerppufile);
|
|
|
end;
|
|
@@ -117,6 +120,7 @@ implementation
|
|
|
size:=OS_NO;
|
|
|
intsize:=0;
|
|
|
location:=nil;
|
|
|
+ def:=nil;
|
|
|
{$ifdef powerpc}
|
|
|
composite:=false;
|
|
|
{$endif powerpc}
|
|
@@ -245,6 +249,18 @@ implementation
|
|
|
end;
|
|
|
|
|
|
|
|
|
+ procedure TCGPara.buildderef;
|
|
|
+ begin
|
|
|
+ defderef.build(def);
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
+ procedure TCGPara.deref;
|
|
|
+ begin
|
|
|
+ def:=tdef(defderef.resolve);
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
procedure TCGPara.ppuwrite(ppufile: tcompilerppufile);
|
|
|
var
|
|
|
hparaloc: PCGParaLocation;
|
|
@@ -256,6 +272,7 @@ implementation
|
|
|
{$ifdef powerpc}
|
|
|
ppufile.putbyte(byte(composite));
|
|
|
{$endif}
|
|
|
+ ppufile.putderef(defderef);
|
|
|
nparaloc:=0;
|
|
|
hparaloc:=location;
|
|
|
while assigned(hparaloc) do
|
|
@@ -313,6 +330,7 @@ implementation
|
|
|
{$ifdef powerpc}
|
|
|
composite:=boolean(ppufile.getbyte);
|
|
|
{$endif}
|
|
|
+ ppufile.getderef(defderef);
|
|
|
nparaloc:=ppufile.getbyte;
|
|
|
while nparaloc>0 do
|
|
|
begin
|