|
From: | Dave Hansen |
Subject: | RE: [avr-gcc-list] Inconsisten behaviour of switch statement |
Date: | Mon, 26 Mar 2007 12:37:51 -0400 |
From: Eric Weddington <address@hidden>
> From: Schwichtenberg, Knut [mailto:address@hidden
[...]
> Eric, the point is not that I don't like the output, but the > case to be > selected should be deterministic. I always thought that a switch > statement would lead to identical results if the input value is > identical. This is currently not true. The table jump for a volatile > variable is identical to an if-then-else structure of a non-volatile > variable and the current if-then-else implementation for a volatile > variable can not be simulated by a table jump.This is one of many reasons why I personally don't like switch statements inembedded code. I still suggest coding your algorithm as a dispatch table. Give it a try.
I think Knut has a point. At least, if I understand what's going on. Given code like
switch (var) { <etc.> }If var is volatile, it should be read only once, regarless of the number of cases. Consider code like
switch (fn()) { <etc.> } How many times would you expect fn to be called?Of course, a simple workaround would be to read the value of var into a non-volatile local variable, and switch on that, e.g.,
local = var; switch (local) { <etc.> } But he shouldn't _have_ to do that. Bug in gcc? Regards, -=Dave _________________________________________________________________Get a FREE Web site, company branded e-mail and more from Microsoft Office Live! http://clk.atdmt.com/MRT/go/mcrssaub0050001411mrt/direct/01/
[Prev in Thread] | Current Thread | [Next in Thread] |