Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-patches by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group