On Mon, 18 Feb 2013, Daniel Michalik wrote:
> When comparing the asm outputs I see that the first example does not call
> ___fs2uint, why does it not need to do this to cast the value of x?
> void main(void) {
> float x = 6116.0;
> debug = x;
> //debug is 6116.
> }
> unsigned int debug = 1234;
> float julianday = 6116.0;
>
> void main(void) {
> float x = 6116.0;
>
> debug = julianday;
> // expect 6116, obtain a vastly different (arbitrary?) number
> }
I can't answer most of your questions because I do use pic and so I am not
very familiar with that part of SDCC. However, I can answer why SDCC does
not need to call __fs2uint in the first example. SDCC's optimizations are
all at the function level. It can see that x is assigned the float value
6116.0 and then debug is assigned a value from x. It sees that there are
no intervening instructions that could modify x's value, therefor debug is
assigned the value 6116.0 cast to unsigned int. This cast is being applied
to a known constant, so the compiler performs this cast during compilation
to avoid the overhead of calling __fs2uint during run-time.
This does not happen in the second example because julianday is assigned
the value 6116.0 outside of the function. When optimizing the function,
the compiler only considers the code within the function and so does not
assume any variable still has its globally initialized value. Since the
compiler is not certain of the value of julianday, it cannot compute the
cast at compile-time and so inserts a call to __fs2uint to perform the
cast at run-time.
Give this version a try:
void main(void) {
volatile float x = 6116.0;
debug = x;
//debug is 6116.
}
The "volatile" keyword should disable most optimizion related to the
variable x and force the cast to be performed at run-time. If this leaves
the correct value in debug, the problem is with initialization of global
variables. However, if this also fails, then there is likely a problem
with the function implementing the run-time cast.
Erik
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Sdcc-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user