Op 04-04-2021 om 12:50 schreef Joost van der Sluis via fpc-pascal:
I came across some issues while doing this, but I can not remember all
of them.
Another one: (Also constant propagation)
-O4, {$WRITEABLECONST OFF}
# [19] a := DigitalPinToBitMask[5];
lds r18,(TC_sARDUINO_ss_DIGITALPINTOBITMASK+5)
# Var a located in register r18
# Register r18 allocated
# Register r18 released
# [20] a := 32;
ldi r18,32
First, the compiler could remove line 19 completely.
Secondly, (TC_sARDUINO_ss_DIGITALPINTOBITMASK+5) is a constant with
value 32. So why the lds, and not ldi? (ie: line 19 and 20 are exactly
the same!)
btw: the value of a was not used in this example, so a warning was
raised. But the compiler could also throw this piece of code away
altogether....
Regards,
Joost.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal