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

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: float4/float8/int64 passed by value with tsearchfixup
Дата
Msg-id 14681.1208644280@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: float4/float8/int64 passed by value with tsearchfixup  (Gregory Stark <stark@enterprisedb.com>)
Ответы Re: float4/float8/int64 passed by value with tsearchfixup  (Gregory Stark <stark@enterprisedb.com>)
Список pgsql-patches
Gregory Stark <stark@enterprisedb.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

В списке pgsql-patches по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: float4/float8/int64 passed by value with tsearch fixup
Следующее
От: Zoltan Boszormenyi
Дата:
Сообщение: Re: float4/float8/int64 passed by value with tsearch fixup