On Mon, Feb 22, 2010 at 11:27 AM, Andrew Haley <a...@redhat.com> wrote:
> On 02/21/2010 12:13 PM, Richard Guenther wrote:
>> On Sun, Feb 21, 2010 at 1:06 PM, Geert Bosch <bo...@adacore.com> wrote:
>>>
>>> On Feb 21, 2010, at 06:18, Steven Bosscher wrote:
>>>> My point: gcc may fail to attract users (and/or may be losing users)
>>>> when it tries to tailor to the needs of minorities.
>>>>
>>>> IMHO it would be much more reasonable to change the defaults to
>>>> generate code that can run on, say, 95% of the computers still in use.
>>>> If a user want to use the latest-and-greatest gcc for a really old
>>>> machine, the burden of adding extra flags to change the default
>>>> behavior of the compiler should be on that user.
>>>>
>>>> In this case of the i386 back end, that probably means changing the
>>>> default to something like pentium3.
>>>
>>> The biggest change we need to make for x86 is to enable SSE2,
>>> so we can get proper rounding behavior for float and double,
>>> as well as significant performance increases.
>>
>> I think Joseph fixed the rounding behavior for 4.5.  Also without an adjusted
>> ABI you'd introduce x87 <-> SSE register moves which are not helpful
>> for performance.
>
> Exactly.  For example,
>
> double plus(double a, double b)
> {
>  return a+b;
> }
>
> plus:
>        pushl   %ebp
>        movl    %esp, %ebp
>        subl    $8, %esp
>        movsd   16(%ebp), %xmm0
>        addsd   8(%ebp), %xmm0
>        movsd   %xmm0, -8(%ebp)
>        fldl    -8(%ebp)
>        leave
>        ret

Yep.  As the issue only concerns return values we could start to
return in both %sp0 and %xmm0 for externally visible functions.
That would still have a spurios set of %sp0 and FP stack adjustment
but the caller could use %xmm0 and hope performance wouldn't
be affected too much.  Of course that's an ABI change that is
only compatible in one direction.

Richard.

Reply via email to