Ian Lance Taylor <ian@airs.com> writes: | 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.
Oh gosh. | For the C4X target, a | single precision floating point zero is apparently represented as | 0x80000000 (for double precision there is another 32 zero bits). Very interesting. | 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. I guess, this is not something C4X maintainers will correct in the future? | 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. OK, thanks. I was rewriting part of valarray and I saw I made that assumption, and since it is bug chasing time I thought I should make sure my use of memset() isn't going to bomb out. -- Gaby