[Bug c/40471] New: __sync_fetch_and_add seems not working well for -march=i686
hailijuan at gmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Jun 17 07:16:00 GMT 2009
Hi,
Please take a look at the testcase faadd.c:
--------------------------------------------------------------
int foo (int * p, int i)
{
return __sync_fetch_and_add(p, i);
}
int n = 1;
int main()
{
printf("%d %d\n", foo (&n, n), n);
return 0;
}
--------------------------------------------------------------
It is expected to print "1 2". However gcc 4.4.0 for i386-solaris prints "1 1"
for it.
# gcc faadd.c -march=i686
faadd.c: In function 'main':
faadd.c:9: warning: incompatible implicit declaration of built-in function
'printf'
# ./a.out
1 1
# gcc -v
Using built-in specs.
Target: i386-pc-solaris2.11
Configured with: /import/iropt5/lijuan/plain-gcc/gcc-git/configure
--prefix=/import/dr3/i386/gcc-4.4.0 --enable-shared --disable-static
--disable-libtool-lock --disable-libada --enable-libssp
--enable-languages=c,c++,objc,fortran --enable-threads=posix --enable-tls=yes
--with-system-zlib --without-gnu-ld --with-ld=/usr/ccs/bin/ld
--with-as=/usr/sfw/bin/gas --enable-c99 --enable-nls --enable-wchar_t
--enable-libstdcxx-allocator=mt --with-pic --disable-bootstrap
Thread model: posix
gcc version 4.4.0 20090421 (prerelease) (GCC)
# uname -a
SunOS gcc-v20z-s04 5.11 snv_102 i86pc i386 i86pc
The assembly code for foo looks like as follows:
foo:
pushl %ebp
movl %esp, %ebp
movl 12(%ebp), %edx
movl 8(%ebp), %eax
lock xaddl %edx, (%eax)
movl %edx, %eax
popl %ebp
ret
I have also tried running it on other hosts. x86-solaris and x86-Linux both
printed "1 1" while sparc and powerpc machines both printed "1 2". Is it a real
defect agains gcc for x86-solaris or something wrong with -march? Thanks a lot,
-- Lijuan
--
Summary: __sync_fetch_and_add seems not working well for -
march=i686
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: hailijuan at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40471
More information about the Gcc-bugs
mailing list