equal
deleted
inserted
replaced
36 |
36 |
37 // Atomically copy 64 bits of data |
37 // Atomically copy 64 bits of data |
38 static void atomic_copy64(const volatile void *src, volatile void *dst) { |
38 static void atomic_copy64(const volatile void *src, volatile void *dst) { |
39 #if defined(PPC32) |
39 #if defined(PPC32) |
40 double tmp; |
40 double tmp; |
41 asm volatile ("lfd %0, 0(%1)\n" |
41 asm volatile ("lfd %0, %2\n" |
42 "stfd %0, 0(%2)\n" |
42 "stfd %0, %1\n" |
43 : "=f"(tmp) |
43 : "=&f"(tmp), "=Q"(*(volatile double*)dst) |
44 : "b"(src), "b"(dst)); |
44 : "Q"(*(volatile double*)src)); |
45 #elif defined(S390) && !defined(_LP64) |
45 #elif defined(S390) && !defined(_LP64) |
46 double tmp; |
46 double tmp; |
47 asm volatile ("ld %0, 0(%1)\n" |
47 asm volatile ("ld %0, 0(%1)\n" |
48 "std %0, 0(%2)\n" |
48 "std %0, 0(%2)\n" |
49 : "=r"(tmp) |
49 : "=r"(tmp) |