* use g_ptrtypecast_ref() in a_load_ref_reg() when we have to typecast

references

git-svn-id: trunk@34028 -
This commit is contained in:
Jonas Maebe 2016-06-30 15:33:27 +00:00
parent c421171461
commit f2c1e4234f

View File

@ -708,9 +708,7 @@ implementation
{ typecast the pointer to the struct into a pointer to an { typecast the pointer to the struct into a pointer to an
integer of equal size } integer of equal size }
tmpsize:=def2intdef(fromsize,tosize); tmpsize:=def2intdef(fromsize,tosize);
hreg:=getaddressregister(list,cpointerdef.getreusable(tmpsize)); g_ptrtypecast_ref(list,cpointerdef.getreusable(fromsize),cpointerdef.getreusable(tmpsize),sref);
a_loadaddr_ref_reg(list,fromsize,cpointerdef.getreusable(tmpsize),sref,hreg);
reference_reset_base(sref,cpointerdef.getreusable(tmpsize),hreg,0,sref.alignment);
{ load that integer } { load that integer }
a_load_ref_reg(list,tmpsize,tosize,sref,register); a_load_ref_reg(list,tmpsize,tosize,sref,register);
end end
@ -735,12 +733,10 @@ implementation
else else
begin begin
(* typecast the pointer to the value instead of the value (* typecast the pointer to the value instead of the value
itself if they have the same size but are of different itself if tosize<=fromsize but they are of different
kinds, because we can't e.g. typecast a loaded <{i32, i32}> kinds, because we can't e.g. bitcast a loaded <{i32, i32}>
to an i64 *) to an i64 *)
hreg:=getaddressregister(list,cpointerdef.getreusable(tosize)); g_ptrtypecast_ref(list,cpointerdef.getreusable(fromsize),cpointerdef.getreusable(tosize),sref);
a_loadaddr_ref_reg(list,fromsize,cpointerdef.getreusable(tosize),sref,hreg);
reference_reset_base(sref,cpointerdef.getreusable(tosize),hreg,0,sref.alignment);
fromsize:=tosize; fromsize:=tosize;
end; end;
end; end;