[HACKERS] GCC memory barriers are missing cc clobbers

2014-09-19 Thread 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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] GCC memory barriers are missing cc clobbers

2014-09-19 Thread 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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] GCC memory barriers are missing cc clobbers

2014-09-19 Thread Tom Lane
Andres Freund and...@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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] GCC memory barriers are missing cc clobbers

2014-09-19 Thread Andres Freund
On 2014-09-19 09:58:01 -0400, Tom Lane wrote:
 Andres Freund and...@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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] GCC memory barriers are missing cc clobbers

2014-09-19 Thread Tom Lane
Andres Freund and...@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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] GCC memory barriers are missing cc clobbers

2014-09-19 Thread Andres Freund
On 2014-09-19 10:58:56 -0400, Tom Lane wrote:
 Andres Freund and...@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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers