Re: AW: AW: Could turn on -O2 in AIX

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: AW: AW: Could turn on -O2 in AIX
Дата
Msg-id 200101230113.UAA22069@candle.pha.pa.us
обсуждение исходный текст
Ответ на Re: AW: AW: Could turn on -O2 in AIX  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: AW: AW: Could turn on -O2 in AIX  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Tom, can you remind me where we left this?

> Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at> writes:
> >> But that is unfortunately not the problem. Looks like yet 
> >> another broken compiler to me :-(
> 
> > Ok, the comparison ((int) time) > ((int) 0x80000001) is the problem.
> > Reading the comment again and again, I have come to the conclusion,
> > that the intent was originally to avoid INT_MIN on AIX.
> 
> No, I think the other way round.  Digging into Postgres 4.2, I find
> 
> #if defined(PORTNAME_aix)
> /*
>  * AIX considers 2147483648 == -2147483648 (since they have the same bit
>  * representation) but uses a different sign sense in a comparison to 
>  * these integer constants depending on whether the constant is signed 
>  * or not!
>  */
> #include <values.h>
> #define NOSTART_ABSTIME    ((AbsoluteTime) HIBITI)        /* - 2^31 */
> #else
> #define NOSTART_ABSTIME ((AbsoluteTime) 2147483648)    /* - 2^31 */
> #endif /* PORTNAME_aix */
> 
> where HIBITI must come from a system header, because it doesn't appear
> anywhere else in Postgres 4.2.  But I'm betting it was a representation
> of 0x80000000.  By the time of our oldest CVS sources, this had
> metamorphosed into
> 
> #if defined(PORTNAME_aix)
> /*
>  * AIX considers 2147483648 == -2147483648 (since they have the same bit
>  * representation) but uses a different sign sense in a comparison to 
>  * these integer constants depending on whether the constant is signed 
>  * or not!
>  */
> #include <values.h>
> /*#define NOSTART_ABSTIME       ((AbsoluteTime) HIBITI)        */        /* - 2^31 */
> #define NOSTART_ABSTIME      ((AbsoluteTime) INT_MIN)
> #else
> /*#define NOSTART_ABSTIME ((AbsoluteTime) 2147483648)*/ /* - 2^31 */
> #define NOSTART_ABSTIME ((AbsoluteTime) -2147483647)    /* - 2^31 */
> #endif /* PORTNAME_aix */
> 
> Hard to tell how we got from point A to point B, but it seems
> crystal-clear that the *original* author intended to use 0x80000000
> on all platforms.
> 
> > My solution would be to use INT_MIN for all ports, which has the advantage 
> > that the above problematic comparison can be converted to !=,
> > since no integer will be smaller than INT_MIN.
> 
> I agree.  When I was looking at this code this morning, I was wondering
> what INT_MIN was supposed to represent anyway, if NOSTART_ABSTIME is
> INT_MIN + 1.  I think someone messed this up between 4.2 and Postgres95.
> 
> Thomas, any objection to this plan?
> 
>             regards, tom lane
> 


--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: realloc suggestion
Следующее
От: Tom Lane
Дата:
Сообщение: Re: AW: AW: Could turn on -O2 in AIX