struct S { int *sp, fc, *sc, a[2]; }; f (struct S *x) { int *t = x->sc; int t1 = t[0]; int t2 = t[1]; int t3 = t[2]; int a0 = x->a[0]; int a1 = x->a[1]; asm("": :"r" (t2), "r" (t3)); t[2] = t1; t[0] = a1; x->a[1] = a0; x->a[0] = t3; x->fc = t2; x->sp = t; } main () { struct S s; static int sc[3] = {2, 3, 4}; s.sc = sc; s.a[0] = 10; s.a[1] = 11; f (&s); if (s.sp[2] != 2) abort (); exit (0); }