* fixed parameter passing for 64 bit ints

This commit is contained in:
florian 2003-04-27 08:23:51 +00:00
parent a5e7f02527
commit 80b1ccdd76

View File

@ -493,40 +493,65 @@ unit cg64f32;
procedure tcg64f32.a_param64_const(list : taasmoutput;value : qword;const locpara : tparalocation);
var
tmplochi,tmploclo: tparalocation;
begin
{$ifdef fpc}
{$warning FIX ME}
{$endif}
if target_info.endian = endian_big then
swap_qword(value);
cg.a_param_const(list,OS_32,hi(value),locpara);
{ the nr+1 needs definitivly a fix FK }
{ maybe the parameter numbering needs }
{ to take care of this on 32 Bit }
{ systems FK }
cg.a_param_const(list,OS_32,lo(value),locpara);
tmplochi:=locpara;
tmploclo:=locpara;
if locpara.size=OS_S64 then
tmplochi.size:=OS_S32
else
tmplochi.size:=OS_32;
tmploclo.size:=OS_32;
case locpara.loc of
LOC_REGISTER:
tmplochi.register:=tmplochi.registerhigh;
LOC_REFERENCE:
if target_info.endian=endian_big then
inc(tmploclo.reference.offset,4)
else
inc(tmplochi.reference.offset,4);
else
internalerror(2003042702);
end;
cg.a_param_const(list,OS_32,lo(value),tmploclo);
cg.a_param_const(list,OS_32,hi(value),tmplochi);
end;
procedure tcg64f32.a_param64_ref(list : taasmoutput;const r : treference;const locpara : tparalocation);
var
tmpref: treference;
tmploc: tparalocation;
tmprefhi,tmpreflo : treference;
tmploclo,tmplochi : tparalocation;
begin
tmpref := r;
inc(tmpref.offset,4);
tmploc := locpara;
tmploc.registerlow:=tmploc.registerhigh;
if target_info.endian = endian_big then
begin
cg.a_param_ref(list,OS_32,tmpref,tmploc);
cg.a_param_ref(list,OS_32,r,locpara);
end
tmprefhi:=r;
tmpreflo:=r;
tmplochi:=locpara;
tmploclo:=locpara;
if locpara.size=OS_S64 then
tmplochi.size:=OS_S32
else
begin
cg.a_param_ref(list,OS_32,tmpref,locpara);
cg.a_param_ref(list,OS_32,r,locpara);
end;
tmplochi.size:=OS_32;
tmploclo.size:=OS_32;
case locpara.loc of
LOC_REGISTER:
begin
if target_info.endian=endian_big then
inc(tmpreflo.offset,4)
else
inc(tmprefhi.offset,4);
tmplochi.register:=tmplochi.registerhigh;
end;
LOC_REFERENCE:
begin
inc(tmprefhi.offset,4);
inc(tmplochi.reference.offset,4);
end
else
internalerror(2003042701);
end;
cg.a_param_ref(list,OS_32,tmpreflo,tmploclo);
cg.a_param_ref(list,OS_32,tmprefhi,tmplochi);
end;
@ -836,7 +861,10 @@ begin
end.
{
$Log$
Revision 1.40 2003-04-23 20:16:03 peter
Revision 1.41 2003-04-27 08:23:51 florian
* fixed parameter passing for 64 bit ints
Revision 1.40 2003/04/23 20:16:03 peter
+ added currency support based on int64
+ is_64bit for use in cg units instead of is_64bitint
* removed cgmessage from n386add, replace with internalerrors