[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-chat] Missed Optimisation ?

From: bob
Subject: Re: [avr-chat] Missed Optimisation ?
Date: Tue, 01 Mar 2011 13:53:22 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-GB; rv: Gecko/20100915 Thunderbird/3.1.4

On 01/03/11 12:56, Graham Davies wrote:
> bob wrote:
>> ... The code is very simple (runs in Port Change interrupt):
>>    if ((PINA & _BV(A2DDATA)) != 0)
>> result |= 0x80000000;
>>    result >>= 1;
> How is result declared?  Are you using the volatile qualifier?  If so,
> that would explain why the compiler feels obliged to load and store the
> entire 32 bits.
> Graham.
> _______________________________________________
> AVR-chat mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/avr-chat
Hi Graham,
yes, I forgot to mention that its "volatile uint32_t result;"
But that doesn't really hold water as it loads and simply discards the
bytes that or 0 in the immediate operand.
I would expect it to either load 4 bytes, OR 4bytes and store 4 bytes
load 1byte, OR 1 byte and store 1 byte.
Maybe it's just me, but it seems that the OR part is optimised and the
load part not.
OK I can overcome this by using assembler obviously.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]