mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 16:39:19 +02:00
* don't write the destination register in a_load_ref_reg_unaligned() before
the reference has been used for the last time, as the destination register could be the base or index register of the reference git-svn-id: trunk@33393 -
This commit is contained in:
parent
2221e4e4bd
commit
8c0d9b581c
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -10875,6 +10875,7 @@ tests/tbs/tb0614.pp svneol=native#text/pascal
|
|||||||
tests/tbs/tb0615.pp svneol=native#text/pascal
|
tests/tbs/tb0615.pp svneol=native#text/pascal
|
||||||
tests/tbs/tb0616.pp svneol=native#text/pascal
|
tests/tbs/tb0616.pp svneol=native#text/pascal
|
||||||
tests/tbs/tb0617.pp svneol=native#text/pascal
|
tests/tbs/tb0617.pp svneol=native#text/pascal
|
||||||
|
tests/tbs/tb0618.pp svneol=native#text/plain
|
||||||
tests/tbs/tb205.pp svneol=native#text/plain
|
tests/tbs/tb205.pp svneol=native#text/plain
|
||||||
tests/tbs/tb610.pp svneol=native#text/pascal
|
tests/tbs/tb610.pp svneol=native#text/pascal
|
||||||
tests/tbs/tb613.pp svneol=native#text/plain
|
tests/tbs/tb613.pp svneol=native#text/plain
|
||||||
|
@ -812,7 +812,7 @@ implementation
|
|||||||
if fromsize in [OS_64,OS_S64] then
|
if fromsize in [OS_64,OS_S64] then
|
||||||
begin
|
begin
|
||||||
{ split into two 32 bit loads }
|
{ split into two 32 bit loads }
|
||||||
hreg1:=makeregsize(register,OS_32);
|
hreg1:=getintregister(list,OS_32);
|
||||||
hreg2:=getintregister(list,OS_32);
|
hreg2:=getintregister(list,OS_32);
|
||||||
if target_info.endian=endian_big then
|
if target_info.endian=endian_big then
|
||||||
begin
|
begin
|
||||||
@ -831,6 +831,7 @@ implementation
|
|||||||
inc(href.offset,4);
|
inc(href.offset,4);
|
||||||
a_load_ref_reg(list,OS_32,OS_32,href,hreg2);
|
a_load_ref_reg(list,OS_32,OS_32,href,hreg2);
|
||||||
end;
|
end;
|
||||||
|
a_load_reg_reg(list,OS_32,OS_64,hreg1,register);
|
||||||
list.concat(taicpu.op_reg_reg_const_const(A_BFI,register,makeregsize(hreg2,OS_64),32,32));
|
list.concat(taicpu.op_reg_reg_const_const(A_BFI,register,makeregsize(hreg2,OS_64),32,32));
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
42
tests/tbs/tb0618.pp
Normal file
42
tests/tbs/tb0618.pp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
type
|
||||||
|
PStreamRec= ^TStreamRec;
|
||||||
|
|
||||||
|
TStreamRec = Packed Record
|
||||||
|
ObjType : byte;
|
||||||
|
Next : PStreamRec;
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
BaseRec : PStreamRec= nil;
|
||||||
|
|
||||||
|
RType1 : TStreamRec = (
|
||||||
|
ObjType : 79
|
||||||
|
);
|
||||||
|
RType2 : TStreamRec = (
|
||||||
|
objtype : 80
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
procedure RegisterType(var R : TStreamRec);
|
||||||
|
var
|
||||||
|
P : PStreamRec;
|
||||||
|
|
||||||
|
begin
|
||||||
|
P := BaseRec;
|
||||||
|
while (P <> nil) and (P^.Objtype <> R.ObjType) do
|
||||||
|
P:=P^.Next;
|
||||||
|
if not assigned(P) then
|
||||||
|
begin
|
||||||
|
R.Next:=BaseRec;
|
||||||
|
BaseRec:=@R;
|
||||||
|
end;
|
||||||
|
{ nothing to do here
|
||||||
|
else
|
||||||
|
P:=@R; }
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
RegisterType(Rtype1);
|
||||||
|
RegisterType(RType2);
|
||||||
|
end.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user