Re: float4/float8/int64 passed by value with tsearchfixup

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Gregory Stark <stark(at)enterprisedb(dot)com>
Cc: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>, "Zoltan Boszormenyi" <zb(at)cybertec(dot)at>, pgsql-patches(at)postgresql(dot)org, "Hans-Juergen Schoenig" <hs(at)cybertec(dot)at>, "Magnus Hagander" <magnus(at)hagander(dot)net>
Subject: Re: float4/float8/int64 passed by value with tsearchfixup
Date: 2008-04-19 22:31:20
Message-ID: 14681.1208644280@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches

Gregory Stark <stark(at)enterprisedb(dot)com> writes:
>> Tom Lane wrote:
>>> Specifically, I think what you missed is that on some platforms C
>>> functions pass or return float values differently from similar-sized
>>> integer or pointer values (typically, the float values get passed in
>>> floating-point registers).

> But I'm skeptical that it would hit such a wide swathe of the build farm. In
> particular AFAIK the standard ABI for i386 does no such thing.

I did some digging, and it seems you're mistaken. The standard gcc ABI
for both i386 and x86_64 returns floats in float registers (387
registers in the first case, and SSE registers in the second case).
This appears to have been the case for a very long time. I quote from
the manual for gcc 2.95:

`-mno-fp-ret-in-387'
Do not use the FPU registers for return values of functions.

The usual calling convention has functions return values of types
`float' and `double' in an FPU register, even if there is no FPU.
The idea is that the operating system should emulate an FPU.

The option `-mno-fp-ret-in-387' causes such values to be returned
in ordinary CPU registers instead.

It seems very odd that Alvaro's testing on an AMD64 platform didn't
show the problem.

regards, tom lane

In response to

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Zoltan Boszormenyi 2008-04-19 22:44:59 Re: float4/float8/int64 passed by value with tsearch fixup
Previous Message Tom Lane 2008-04-19 21:12:00 Re: float4/float8/int64 passed by value with tsearch fixup