* fix tavraddnode.second_cmp

* optimized register usage
+ implemented concatcopy for len<16

git-svn-id: branches/avr@17106 -
This commit is contained in:
florian 2011-03-09 19:46:05 +00:00
parent 8f343078fa
commit c7e6d07ff0
2 changed files with 13 additions and 7 deletions

View File

@ -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;

View File

@ -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;