H.J. Lu wrote: > On Wed, Dec 9, 2009 at 7:51 AM, Andrew Haley <a...@redhat.com> wrote: >> H.J. Lu wrote: >>> On Wed, Dec 9, 2009 at 7:10 AM, Andrew Haley <a...@redhat.com> wrote: >>>> H. Peter Anvin wrote: >>>>> On 12/09/2009 06:56 AM, Michael Matz wrote: >>>>>>> Aren't bits in the _Bool byte of"bar" specified by the psABI >>>>>> Right now they are specified in the psABI, you suggested to remove that >>>>>> specification. >>>>>> >>>>> The intent of H.J.'s proposal is to require bits <7:1> == 0 in all cases >>>>> (and higher bits as don't cares, the same way a char is passed), as >>>>> opposed to the current text which requires <63:1> == 0 when passed as >>>>> registers or on the stack (and <7:1> == 0 when stored in a memory >>>>> object.) Furthermore, the current psABI text is inconsistent for >>>>> arguments are return values; this is a bug in the wordsmithing of the >>>>> text rather than intentional, if I remember the original discussions >>>>> correctly. >>>> Surely Postel's Law applies: >>>> >>>> Be conservative in what you do; be liberal in what you accept from others. >>>> >>>> So, return values should be zero-extended to the full word, but we >>>> shouldn't >>>> assume that parameters will be. >>> I guess you missed the discussion around July 2007: >>> >>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42324#c5 >> >> No, I didn't miss it. We have had discussions about this before. >> I still think Postel's Law applies, particularly as we have an >> explicit guarantee in the psABI that >> >> --- >> 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. >> --- > > Please read it again. It is only for parameter passing, not for > function return. Since gcc 4.3, we return _Bool in %AL.
Yes, I know that too. Why does the fact that this is only for parameter passing make any difference? Andrew.