* don't create (useless) temporary array/record/... for the result

of functions at the caller side, since these will already be allocated
    at the callee side
  * added comment to cpupara explaining why we never allocate the function
    result on the caller side and then pass it as an invisible parameter,
    but instead always let the callee allocate it

git-svn-id: branches/jvmbackend@18420 -
This commit is contained in:
Jonas Maebe 2011-08-20 07:58:09 +00:00
parent a82831b2e9
commit 254636ab84
2 changed files with 10 additions and 1 deletions

View File

@ -147,6 +147,10 @@ implementation
function TJVMParaManager.ret_in_param(def: tdef; calloption: tproccalloption): boolean;
begin
{ not as efficient as returning in param for jvmimplicitpointertypes,
but in the latter case the routines are harder to use from Java
(especially for arrays), because the caller then manually has to
allocate the instance/array of the right size }
Result:=false;
end;

View File

@ -80,7 +80,12 @@ implementation
procedure tjvmcallnode.set_result_location(realresdef: tstoreddef);
begin
location_reset_ref(location,LOC_REFERENCE,def_cgsize(realresdef),1);
tg.gethltemp(current_asmdata.CurrAsmList,realresdef,realresdef.size,tt_normal,location.reference);
{ in case of jvmimplicitpointertype(), the function will have allocated
it already and we don't have to allocate it again here }
if not jvmimplicitpointertype(realresdef) then
tg.gethltemp(current_asmdata.CurrAsmList,realresdef,realresdef.size,tt_normal,location.reference)
else
tg.gethltemp(current_asmdata.CurrAsmList,java_jlobject,java_jlobject.size,tt_normal,location.reference);
end;