dev builds
themes manual
device status forums
mailing lists
IRC bugs
dev guide

Rockbox mail archive

Subject: Re: Linus: bootloader main.c,1.17,1.18

Re: Linus: bootloader main.c,1.17,1.18

From: Ronald Teune <>
Date: 2005-07-12

Hi Dave,

neat, thanks. Odd that gcc doesn't do such a simple optimisation.
Btw, if anyone else on the list doesn't know what atomic is, here's a
clear description:


On Tue, 12 Jul 2005 14:51:46 +0200, <> wrote:

> Hi Ronald;
> or_l is not a function call - it compiles to inline code (i.e. no
> CALL/RETURN, the body is actually applied in-place)
> Furthermore, or_l is actually optimised assembler (just one assembly
> instruction!) whereas the C code "X |= Y" compiles to two assembly
> instructions, which is slower and also not atomic
> Regards,
> d
>> Hi,
>>> and_l(~0x01000000, &GPIO_OUT); -> /* GPIO24 is the Cypress chip
>>> power */
>>> GPIO_ENABLE |= 0x01000000; -> or_l(0x01000000, &GPIO_ENABLE);
>>> GPIO_FUNCTION |= 0x01000000; -> or_l(0x01000000, &GPIO_FUNCTION);
>> Not that I'm very into the rockbox code not deep c programming, but I'm
>> curious about the above code change. It seems to me that the original
>> code
>> (left) is more like standard c and probably faster (no function calls).
>> Can someone enlighten me on this one?
>> Ronald
Received on Tue Jul 12 15:12:49 2005

Page was last modified "Jan 10 2012" The Rockbox Crew