[Bug target/42553] New: wrong code with -O1
debian-gcc at lists dot debian dot org
gcc-bugzilla@gcc.gnu.org
Wed Dec 30 12:57:00 GMT 2009
current trunk/branches on x86_64-linux-gnu. return values with different
compilers and different optimizations:
-O0 -O1 -O2 -O3
gcc-4.1 0 2 2 2
gcc-4.3 0 2 2 2
gcc-4.4 2 0 0 0
gcc-4.5 0 1 0 0
Matthias
#include <stdbool.h>
#include <stdio.h>
static bool atomic_test_and_reset_bit(unsigned long *v,unsigned long bit) {
bool res;
__asm__ __volatile__( "btr %2,%1\n"
"adc $0,%0\n"
:"=r"(res), "=m"(*v)
:"r"(bit), "r"(0)) ;
return res ? 1 : 0;
}
int main(void)
{
unsigned long flags = 0;
int j;
j = atomic_test_and_reset_bit(&flags, 2);
printf("%d\n", j);
return 0;
}
--
Summary: wrong code with -O1
Product: gcc
Version: 4.4.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: debian-gcc at lists dot debian dot org
GCC target triplet: x86_64-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42553
More information about the Gcc-bugs
mailing list