mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-05 02:09:29 +01:00
* fix tavraddnode.second_cmp
* optimized register usage + implemented concatcopy for len<16 git-svn-id: branches/avr@17106 -
This commit is contained in:
parent
8f343078fa
commit
c7e6d07ff0
@ -516,7 +516,11 @@ unit cgcpu;
|
||||
shift:=0;
|
||||
for i:=1 to tcgsize2size[size] do
|
||||
begin
|
||||
list.concat(taicpu.op_reg_const(A_LDI,reg,(qword(a) and mask) shr shift));
|
||||
if ((qword(a) and mask) shr shift)=0 then
|
||||
emit_mov(list,reg,NR_R1)
|
||||
else
|
||||
list.concat(taicpu.op_reg_const(A_LDI,reg,(qword(a) and mask) shr shift));
|
||||
|
||||
mask:=mask shl 8;
|
||||
inc(shift,8);
|
||||
reg:=GetNextReg(reg);
|
||||
@ -578,8 +582,8 @@ unit cgcpu;
|
||||
getcpuregister(list,NR_R30);
|
||||
getcpuregister(list,NR_R31);
|
||||
tmpreg:=NR_R30;
|
||||
list.concat(taicpu.op_reg_reg(A_MOV,tmpreg,ref.index));
|
||||
list.concat(taicpu.op_reg_reg(A_MOV,GetNextReg(tmpreg),GetNextReg(ref.index)));
|
||||
emit_mov(list,tmpreg,ref.index);
|
||||
emit_mov(list,GetNextReg(tmpreg),GetNextReg(ref.index));
|
||||
list.concat(taicpu.op_reg_reg(A_ADD,tmpreg,ref.base));
|
||||
list.concat(taicpu.op_reg_reg(A_ADC,GetNextReg(tmpreg),GetNextReg(ref.base)));
|
||||
ref.base:=tmpreg;
|
||||
@ -590,8 +594,8 @@ unit cgcpu;
|
||||
getcpuregister(list,NR_R30);
|
||||
getcpuregister(list,NR_R31);
|
||||
tmpreg:=NR_R30;
|
||||
list.concat(taicpu.op_reg_reg(A_MOV,tmpreg,ref.base));
|
||||
list.concat(taicpu.op_reg_reg(A_MOV,GetNextReg(tmpreg),GetNextReg(ref.base)));
|
||||
emit_mov(list,tmpreg,ref.base);
|
||||
emit_mov(list,GetNextReg(tmpreg),GetNextReg(ref.base));
|
||||
ref.base:=tmpreg;
|
||||
ref.index:=NR_NO;
|
||||
end
|
||||
@ -600,8 +604,8 @@ unit cgcpu;
|
||||
getcpuregister(list,NR_R30);
|
||||
getcpuregister(list,NR_R31);
|
||||
tmpreg:=NR_R30;
|
||||
list.concat(taicpu.op_reg_reg(A_MOV,tmpreg,ref.index));
|
||||
list.concat(taicpu.op_reg_reg(A_MOV,GetNextReg(tmpreg),GetNextReg(ref.index)));
|
||||
emit_mov(list,tmpreg,ref.index);
|
||||
emit_mov(list,GetNextReg(tmpreg),GetNextReg(ref.index));
|
||||
ref.base:=tmpreg;
|
||||
ref.index:=NR_NO;
|
||||
end;
|
||||
|
||||
@ -182,6 +182,8 @@ interface
|
||||
|
||||
for i:=2 to tcgsize2size[left.location.size] do
|
||||
begin
|
||||
tmpreg1:=GetNextReg(tmpreg1);
|
||||
tmpreg2:=GetNextReg(tmpreg2);
|
||||
if i=5 then
|
||||
begin
|
||||
tmpreg1:=left.location.registerhi;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user