https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68636
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Can you try the following w/o the asm? typedef unsigned long uintptr_t;; volatile unsigned int x; void testTestTest(int zeroIsCavium) { x = *((volatile unsigned int *) (((volatile void *)((uintptr_t)(0x00800070) | ((0xA0000000) + (((((uintptr_t)(0x00800070)) >= 0x00800000) && (zeroIsCavium == 0) ) ? 0x20000000 : 0)))))); }