On Wed, Jan 30, 2013 at 4:49 PM, Andrew Haley <a...@redhat.com> wrote: > On 01/30/2013 03:46 PM, Richard Biener wrote: >> On Wed, Jan 30, 2013 at 3:22 PM, Andrew Haley <a...@redhat.com> wrote: >>> Hi, >>> >>> On 01/30/2013 02:18 PM, Michael Matz wrote: >>> >>>> On Wed, 30 Jan 2013, Andrew Haley wrote: >>>> >>>>> I'm looking at Section 3.2.3, Parameter Passing. >>>>> http://artfiles.org/kernel.org/pub/scm/devel/binutils/hjl/x86-64-psabi.git/ >>>>> >>>>> I still cannot tell whether parameters should or should not be sign- or >>>>> zero-extended when they are moved into registers at a call. I'm guessing >>>>> not. >>>> >>>> It's intentionally unspecified. >>> >>> Aha! It would have been nice if the psABI said so explicitly. Quite >>> a few people have spent time trying to find this information. >>> >>>>> Which is it? This is important for interworking. >>>> >>>> How? You aren't allowed to access the bits outside the specified argument >>>> type (which must match on caller and callee side), so you can't observe >>>> them, so it's not required to specify their content. >>> >>> OK, thanks. It's clear now. >>> >>> The problem is that LLVM assumes that values are extended at a call. GCC >>> does that, but libffi doesn't. So, calls via libffi to LLVM don't work >>> correctly. >> >> It's an optimization to do so to avoid partial register stalls. > > Well, it's hardly an optimization if it's incorrect, and it seems to be > incorrect. As the old saying goes, I can make your code infinitely fast > if you don't care about the results.
It's incorrect to rely on the extension taking place. It's not incorrect to do the extension. Richard. > Andrew. > >