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:
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
pgsql-patches by date
|Next:||From: Zoltan Boszormenyi||Date: 2008-04-19 22:44:59|
|Subject: Re: float4/float8/int64 passed by value with tsearch fixup|
|Previous:||From: Tom Lane||Date: 2008-04-19 21:12:00|
|Subject: Re: float4/float8/int64 passed by value with tsearch fixup |