Gabriel Dos Reis <[EMAIL PROTECTED]> writes:

>   Does GCC support any target where the object representation of a
> fundamental type T (e.g. int, float, double, pointers) whose all bits
> are zero does not hold value (T)0?

Surprisingly, the answer seems to be yes.  For the C4X target, a
single precision floating point zero is apparently represented as
0x80000000 (for double precision there is another 32 zero bits).

That said, it doesn't actually work correctly.  Compiling

float f;
float g = 0.0;
struct s { int i; float f; int j; };
struct s sv = { 1, 0.0, 2 };

gives me

        .file   "foo.c"
        .version        40

        .data
data_sec:
        .global _g
        .globl  _g
        .bss    _g,1
        .global _sv
        .data
_sv:
        .word   1
        .word   -2147483648
        .word   2
        .globl  _f
        .bss    _f,1
        .end

In other words, the floating point zero is only generated correctly
when gcc is forced to output the initializer for some other reason.

Given that doesn't work, it is probably reasonably safe to assume gcc
is always going to generate all zero bits for a fundamental types
initialized to zero.

Ian

Reply via email to