Обсуждение: GCC memory barriers are missing "cc" clobbers

Поиск
Список
Период
Сортировка

GCC memory barriers are missing "cc" clobbers

От
Andres Freund
Дата:
Hi,

barrier.h defines memory barriers for x86 as:
32bit:
#define pg_memory_barrier()           \       __asm__ __volatile__ ("lock; addl $0,0(%%esp)" : : : "memory")
64bit:
#define pg_memory_barrier()        \__asm__ __volatile__ ("lock; addl $0,0(%%rsp)" : : : "memory")

But addl sets condition flags. So this really also needs a "cc" clobber?
Or am I missing something?

Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services



Re: GCC memory barriers are missing "cc" clobbers

От
Andres Freund
Дата:
Hi,

On 2014-09-19 12:00:16 +0200, Andres Freund wrote:
> 
> barrier.h defines memory barriers for x86 as:
> 32bit:
> #define pg_memory_barrier()           \
>         __asm__ __volatile__ ("lock; addl $0,0(%%esp)" : : : "memory")
> 64bit:
> #define pg_memory_barrier()        \
>     __asm__ __volatile__ ("lock; addl $0,0(%%rsp)" : : : "memory")
> 
> But addl sets condition flags. So this really also needs a "cc" clobber?
> Or am I missing something?

What I missed is that x86 has an implied "cc" clobber for every inline
assembly statement. So forget that.

Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services



Re: GCC memory barriers are missing "cc" clobbers

От
Tom Lane
Дата:
Andres Freund <andres@2ndquadrant.com> writes:
> On 2014-09-19 12:00:16 +0200, Andres Freund wrote:
>> But addl sets condition flags. So this really also needs a "cc" clobber?
>> Or am I missing something?

> What I missed is that x86 has an implied "cc" clobber for every inline
> assembly statement. So forget that.

While it might not be buggy as it stands, I think we should add the "cc"
rather than rely on it being implicit.  One reason is that people will
look at the x86 cases when developing code for other architectures, and
they could easily forget to add "cc" on machines where it does matter.
        regards, tom lane



Re: GCC memory barriers are missing "cc" clobbers

От
Andres Freund
Дата:
On 2014-09-19 09:58:01 -0400, Tom Lane wrote:
> Andres Freund <andres@2ndquadrant.com> writes:
> > On 2014-09-19 12:00:16 +0200, Andres Freund wrote:
> >> But addl sets condition flags. So this really also needs a "cc" clobber?
> >> Or am I missing something?
> 
> > What I missed is that x86 has an implied "cc" clobber for every inline
> > assembly statement. So forget that.
> 
> While it might not be buggy as it stands, I think we should add the "cc"
> rather than rely on it being implicit.  One reason is that people will
> look at the x86 cases when developing code for other architectures, and
> they could easily forget to add "cc" on machines where it does matter.

Fair point. It's also extremly poorly documented - my answer is from a
gcc dev, I haven't found an official document stating it. I don't really
see any need to backpatch though, do you?

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services



Re: GCC memory barriers are missing "cc" clobbers

От
Tom Lane
Дата:
Andres Freund <andres@2ndquadrant.com> writes:
> On 2014-09-19 09:58:01 -0400, Tom Lane wrote:
>> While it might not be buggy as it stands, I think we should add the "cc"
>> rather than rely on it being implicit.  One reason is that people will
>> look at the x86 cases when developing code for other architectures, and
>> they could easily forget to add "cc" on machines where it does matter.

> Fair point. It's also extremly poorly documented - my answer is from a
> gcc dev, I haven't found an official document stating it. I don't really
> see any need to backpatch though, do you?

Well, I'd make it the same in all branches which have that code, which
is not very far back is it?
        regards, tom lane



Re: GCC memory barriers are missing "cc" clobbers

От
Andres Freund
Дата:
On 2014-09-19 10:58:56 -0400, Tom Lane wrote:
> Andres Freund <andres@2ndquadrant.com> writes:
> > I don't really see any need to backpatch though, do you?

> Well, I'd make it the same in all branches which have that code, which
> is not very far back is it?

It was already introduced in 9.2 - no idea whether that's "far back" or
not ;). Done.

Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services