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

Reply via email to