mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 06:49:27 +02:00
Merged revision(s) 40585-40586 from trunk:
* ARM: Remove preindexing and postindexing for LDR in some cases when removing superfluous MOVs. It fixes crash when calling Format() if rtl is compiled with -O3. ........ * Improved the comment. ........ git-svn-id: branches/fixes_3_2@40588 -
This commit is contained in:
parent
7b77856515
commit
71d9269b25
@ -433,6 +433,19 @@ Implementation
|
||||
|
||||
{ finally get rid of the mov }
|
||||
taicpu(p).loadreg(0,taicpu(movp).oper[0]^.reg);
|
||||
{ Remove preindexing and postindexing for LDR in some cases.
|
||||
For example:
|
||||
ldr reg2,[reg1, xxx]!
|
||||
mov reg1,reg2
|
||||
must be translated to:
|
||||
ldr reg1,[reg1, xxx]
|
||||
|
||||
Preindexing must be removed there, since the same register is used as the base and as the target.
|
||||
Such case is not allowed for ARM CPU and produces crash. }
|
||||
if (taicpu(p).opcode = A_LDR) and (taicpu(p).oper[1]^.typ = top_ref)
|
||||
and (taicpu(movp).oper[0]^.reg = taicpu(p).oper[1]^.ref^.base)
|
||||
then
|
||||
taicpu(p).oper[1]^.ref^.addressmode:=AM_OFFSET;
|
||||
asml.remove(movp);
|
||||
movp.free;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user