mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 07:09:18 +02:00
* patch by Christo Crause: combine code paths for avr1 and avrtiny when converting lds/sts to in/out, resolves #36697
git-svn-id: trunk@44163 -
(cherry picked from commit fd4fb5fa19
)
This commit is contained in:
parent
32e17c5114
commit
b65e3288aa
@ -509,61 +509,33 @@ implementation
|
|||||||
end;
|
end;
|
||||||
A_STS:
|
A_STS:
|
||||||
begin
|
begin
|
||||||
{ certain cpu types do not support some instructions, so replace them }
|
if current_settings.cputype in [cpu_avrtiny, cpu_avr1] then
|
||||||
case current_settings.cputype of
|
with taicpu(curtai).oper[0]^ do
|
||||||
cpu_avr1:
|
if (ref^.base=NR_NO) and (ref^.index=NR_NO) and (ref^.symbol=nil) and (ref^.offset<$40) then
|
||||||
begin
|
begin
|
||||||
with taicpu(curtai).oper[0]^ do
|
taicpu(curtai).opcode:=A_OUT;
|
||||||
if (ref^.base=NR_NO) and (ref^.index=NR_NO) and (ref^.symbol=nil) and (ref^.offset<$40) then
|
taicpu(curtai).loadconst(0,ref^.offset);
|
||||||
begin
|
end
|
||||||
taicpu(curtai).opcode:=A_OUT;
|
else if current_settings.cputype=cpu_avr1 then
|
||||||
taicpu(curtai).loadconst(0,ref^.offset);
|
begin
|
||||||
end
|
remove_instruction;
|
||||||
else
|
result:=false;
|
||||||
begin
|
end;
|
||||||
remove_instruction;
|
|
||||||
result:=false;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
cpu_avrtiny:
|
|
||||||
begin
|
|
||||||
with taicpu(curtai).oper[0]^ do
|
|
||||||
if (ref^.base=NR_NO) and (ref^.index=NR_NO) and (ref^.symbol=nil) and (ref^.offset<$40) then
|
|
||||||
begin
|
|
||||||
taicpu(curtai).opcode:=A_OUT;
|
|
||||||
taicpu(curtai).loadconst(0,ref^.offset);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
A_LDS:
|
A_LDS:
|
||||||
begin
|
begin
|
||||||
{ certain cpu types do not support some instructions, so replace them }
|
if current_settings.cputype in [cpu_avrtiny, cpu_avr1] then
|
||||||
case current_settings.cputype of
|
with taicpu(curtai).oper[1]^ do
|
||||||
cpu_avr1:
|
if (ref^.base=NR_NO) and (ref^.index=NR_NO) and (ref^.symbol=nil) and (ref^.offset<$40) then
|
||||||
begin
|
begin
|
||||||
with taicpu(curtai).oper[1]^ do
|
taicpu(curtai).opcode:=A_IN;
|
||||||
if (ref^.base=NR_NO) and (ref^.index=NR_NO) and (ref^.symbol=nil) and (ref^.offset<$40) then
|
taicpu(curtai).loadconst(1,ref^.offset)
|
||||||
begin
|
end
|
||||||
taicpu(curtai).opcode:=A_IN;
|
else if current_settings.cputype=cpu_avr1 then
|
||||||
taicpu(curtai).loadconst(1,ref^.offset)
|
begin
|
||||||
end
|
remove_instruction;
|
||||||
else
|
result:=false;
|
||||||
begin
|
end;
|
||||||
remove_instruction;
|
|
||||||
result:=false;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
cpu_avrtiny:
|
|
||||||
begin
|
|
||||||
with taicpu(curtai).oper[1]^ do
|
|
||||||
if (ref^.base=NR_NO) and (ref^.index=NR_NO) and (ref^.symbol=nil) and (ref^.offset<$40) then
|
|
||||||
begin
|
|
||||||
taicpu(curtai).opcode:=A_IN;
|
|
||||||
taicpu(curtai).loadconst(1,ref^.offset)
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
A_SBIW,
|
A_SBIW,
|
||||||
A_MULS,
|
A_MULS,
|
||||||
|
Loading…
Reference in New Issue
Block a user