On Wed, 2005-12-07 at 15:12 +0100, Tristan Gingold wrote: > Humm, this is a bug related to x86_64. I will fix it.
I've been looking a bit more into the real'image problem. It seems to be a calling conventions problem for snprintf. When I call snprintf from C with one double vararg argument, the compiler puts the arguments into the following registers: %rdi Buffer %esi Buffer Size %edx Format String %xmm0 Double Argument %eax set to 1 (means one arg in xmm) However, gnat compiles the call to snprintf as follows: %rdi Buffer %esi Buffer Size %edx Format String %r12 Double Argument %eax is not set x86_64 apparently as rather baroque vararg conventions. I have found no portable way to synthesize C vararg calls in Ada, so it seems like a C wrapper is needed. BTW, using snprintf %g to print reals has another drawback: snprintf can create strings that aren't considered valid floating point constants in VHDL, like "100". Tom
