struct A { long a; }; static inline void foo(struct A *x) { __asm__ __volatile__("" : "+m"(x->a) : "r"(x) : "memory", "cc"); } static inline void bar(struct A *x) { foo(x); } struct B { char buf[640]; struct A a; }; struct B b[32]; int baz(void) { int i; struct B *j; for (i = 1; i < 32; i++) { j = &b[i]; bar(&j->a); } return 0; }