Hi,
On Mon, 7 Dec 2009, H.J. Lu wrote:
> ---
> When a value of type _Bool is passed in a register or on the stack,
> the upper 63 bits of the eightbyte shall be zero.
> ---
That was the outcome of a discussion in 2005/2006. We put this language
in because at that time all compilers booleanized at the caller.
GCC also makes use of this guarantee (although limited to the
8 bit):
_Bool bartmp;
void foo(_Bool bar)
{
bartmp = bar;
}
will generate
foo:
movb %dil, bartmp(%rip)
ret
I do see value in limiting the zeroing to bits 1-31 when passed on stack.
But we'd need agreement on the discuss@ list, which for some reason didn't
seem to get any of these mails.
Ciao,
Michael.