* fixed a_load_reg_reg() when storing an array/record to another

array/record type (can happen for parameters/function results
    that got a different type for ABI reasons)

git-svn-id: trunk@31189 -
This commit is contained in:
Jonas Maebe 2015-07-03 20:04:22 +00:00
parent 36e5291d94
commit e9d2eb6cff

View File

@ -534,15 +534,14 @@ implementation
if fromsize.typ in [arraydef,recorddef] then
begin
{ store struct/array-in-register to memory }
tmpsize:=def2intdef(fromsize,tosize);
tg.gethltemp(list,fromsize,fromsize.size,tt_normal,tmpref);
a_load_reg_ref(list,fromsize,fromsize,register,tmpref);
{ typecast pointer to memory into pointer to integer type }
hreg:=getaddressregister(list,cpointerdef.getreusable(tmpsize));
a_loadaddr_ref_reg(list,fromsize,cpointerdef.getreusable(tmpsize),tmpref,hreg);
reference_reset_base(sref,cpointerdef.getreusable(tmpsize),hreg,0,tmpref.alignment);
hreg:=getaddressregister(list,cpointerdef.getreusable(tosize));
a_loadaddr_ref_reg(list,fromsize,cpointerdef.getreusable(tosize),tmpref,hreg);
reference_reset_base(sref,cpointerdef.getreusable(tosize),hreg,0,tmpref.alignment);
{ load the integer from the temp into the destination }
a_load_ref_ref(list,tmpsize,tosize,tmpref,sref);
a_load_ref_ref(list,tosize,tosize,sref,ref);
tg.ungettemp(list,tmpref);
end
else