This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Incrementing volatiles?
- To: Andreas Schwab <schwab at issan dot informatik dot uni-dortmund dot de>
- Subject: Re: Incrementing volatiles?
- From: Horst von Brand <vonbrand at inf dot utfsm dot cl>
- Date: Sat, 11 Jul 1998 09:02:38 -0400
- cc: "Matthias Urlichs" <smurf at noris dot de>, egcs at cygnus dot com
Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> said:
> "Matthias Urlichs" <smurf@noris.de> writes:
>
> |> Hi,
> |>
> |> The following code, using egcs-current -O2 -fomit-frame-pointer
> |>
> |> unsigned int foo; afoo() { foo++; }
> |> volatile unsigned int bar; abar() { bar++; }
> |>
> |> compiles, on ix86, to
> |>
> |> afoo: incl foo
> |> ret
> |> abar: movl bar,%eax
> |> incl %eax
> |> movl %eax,bar
> |> ret
> |>
> |> But actually, it should be perfectly valid to compile both to code using
> |> "incr". After all, both versions read the variable, do something with it,
> |> and then write it out.
> |>
> |> Is there a way to convince the optimizer to do this?
> No. volatile prevents all attempts to combine instructions, because any
> two references to a volatile variable never match. This is how gcc
> implements the implementation defined aspects of volatile.
Sorry if I'm being dense... I just don't see any difference here: both are
fetched, incremented and written back. And if it's "implementation defined",
gcc is free to optimize this, isn't it?
--
Dr. Horst H. von Brand mailto:vonbrand@inf.utfsm.cl
Departamento de Informatica Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria +56 32 654239
Casilla 110-V, Valparaiso, Chile Fax: +56 32 797513