The atomic_setbits_int() and atomic_clearbits_int() implementations
use stwcx., which touches the condition code register. This means we
need to tell GCC that it gets clobbered. Fixes issues with
uvm_page_physload() which currently gets miscompiled.
ok?
Index: atomic.h
===================================================================
RCS file: /cvs/src/sys/arch/powerpc/include/atomic.h,v
retrieving revision 1.4
diff -u -p -r1.4 atomic.h
--- atomic.h 23 Mar 2011 16:54:36 -0000 1.4
+++ atomic.h 5 Aug 2013 22:34:00 -0000
@@ -17,7 +17,7 @@ atomic_setbits_int(__volatile unsigned i
" or %0, %1, %0 \n"
" stwcx. %0, 0, %2 \n"
" bne- 1b \n"
- " sync" : "=&r" (tmp) : "r" (v), "r" (uip) : "memory");
+ " sync" : "=&r" (tmp) : "r" (v), "r" (uip) : "cc", "memory");
}
static __inline void
@@ -30,7 +30,7 @@ atomic_clearbits_int(__volatile unsigned
" andc %0, %0, %1 \n"
" stwcx. %0, 0, %2 \n"
" bne- 1b \n"
- " sync" : "=&r" (tmp) : "r" (v), "r" (uip) : "memory");
+ " sync" : "=&r" (tmp) : "r" (v), "r" (uip) : "cc", "memory");
}
#endif /* defined(_KERNEL) */