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
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 |