http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44970
--- Comment #98 from Paolo Bonzini <bonzini at gnu dot org> 2010-11-14 22:35:54 UTC --- Minimized testcase: int f (unsigned long arg, int *cr) { int *p = (int *) arg; int x = *cr; long pu_err = 0; if (x) asm volatile ("stw %2,0(%1)": "=r" (pu_err): "r" (p), "r" (x)); asm volatile ("stw %2,0(%%sr3,%1)": "=r" (pu_err): "r" (p), "r" (x)); return pu_err; } Fails at -O2.