From 9695dba4d98dcadab0fd972ed9b5b20d3323781f Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 24 Apr 2022 22:42:09 +0200 Subject: [PATCH] * AVR: fix TCpuAsmOptimizer.InstructionLoadsFromReg for MOVW * simplify code for MovMov2Movw optimization --- compiler/avr/aoptcpu.pas | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/compiler/avr/aoptcpu.pas b/compiler/avr/aoptcpu.pas index 82263f07e8..eb5901a99a 100644 --- a/compiler/avr/aoptcpu.pas +++ b/compiler/avr/aoptcpu.pas @@ -229,7 +229,7 @@ Implementation top_reg: Result := (p.oper[i]^.reg = reg) or { MOVW } - ((i=1) and (p.opcode=A_MOVW) and (getsupreg(p.oper[0]^.reg)+1=getsupreg(reg))); + ((i=1) and (p.opcode=A_MOVW) and (getsupreg(p.oper[i]^.reg)+1=getsupreg(reg))); top_ref: Result := (p.oper[i]^.ref^.base = reg) or @@ -1205,14 +1205,8 @@ Implementation begin DebugMsg('Peephole MovMov2Movw performed', p); - alloc:=FindRegAllocBackward(taicpu(hp1).oper[0]^.reg,tai(hp1.Previous)); - if assigned(alloc) then - begin - asml.Remove(alloc); - asml.InsertBefore(alloc,p); - { proper book keeping of currently used registers } - IncludeRegInUsedRegs(taicpu(hp1).oper[0]^.reg,UsedRegs); - end; + AllocRegBetween(taicpu(hp1).oper[0]^.reg,p,hp1,UsedRegs); + AllocRegBetween(taicpu(hp1).oper[1]^.reg,p,hp1,UsedRegs); taicpu(p).opcode:=A_MOVW; asml.remove(hp1);