static long __attribute__((noinline)) f1(long x, long *mem) { long r, t; asm volatile ( "rlwinm %0,%1,8,0,31\n\ rlwimi %0,%1,24,0,7\n\ rlwimi %0,%1,24,16,23\n\ rldicl %0,%0,32,0\n\ rldicl %2,%1,32,0\n\ rlwimi %0,%2,8,0,31\n\ rlwimi %0,%2,24,0,7\n\ rlwimi %0,%2,24,16,23" : "=&r"(r), "=r"(t) : "r"(x)); return r; } static long __attribute__((noinline)) f2(long x, long *mem) { long r, t; asm volatile ("std %1,0(%2); ldbrx %0,0,%2" : "=r"(r) : "r"(x), "b"(mem)); return r; } static long __attribute__((noinline)) f3(long x, long *mem) { long r, t; asm volatile ("stdbrx %1,0,%2; ld %0,0(%2)" : "=r"(r) : "r"(x), "b"(mem)); return r; } static long __attribute__((noinline)) f4(long x, long *mem) { long r, t; asm volatile ("std %1,0(%2); ld %0,0(%2)" : "=r"(r) : "r"(x), "b"(mem)); return r; } #define D1(x,y) x##y #define DO(x) D1(f,x) int main() { long tmp, i; for (i = 0; i < 1000000000; ++i) DO(N)(i, &tmp); return 0; }