mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-10 11:09:16 +02:00
* fixed parameter passing for 64 bit ints
This commit is contained in:
parent
a5e7f02527
commit
80b1ccdd76
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user