Simplify address calculation for auto initializers.

This simplifies the code in the compiler, and also generates better code when not using optimization.
This commit is contained in:
Stephen Heumann 2021-10-11 22:10:38 -05:00
parent 5871820e0c
commit a888206111

View File

@ -4276,20 +4276,10 @@ var
{ Load the address of the operand } { Load the address of the operand }
begin {LoadAddress} begin {LoadAddress}
with id^ do {load the base address} if id^.storage = stackFrame then
case storage of Gen2(pc_lda, id^.lln, ord(disp))
stackFrame: Gen2(pc_lda, lln, 0); else
parameter: if itype^.kind = arrayType then Error(57);
Gen2t(pc_lod, pln, 0, cgULong)
else
Gen2(pc_lda, pln, 0);
external,
global,
private: Gen1Name(pc_lao, 0, name);
otherwise: ;
end; {case}
if disp <> 0 then
Gen1t(pc_inc, long(disp).lsw, cgULong)
end; {LoadAddress} end; {LoadAddress}