unix: implement cpu_relax() on ppc64
We also tell the compiler it is not allowed to reorder the PAUSE instruction relative to other instructions. It is a mostly theoretical issue, but better safe than sorry. PR-URL: https://github.com/libuv/libuv/pull/2590 Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Jameson Nash <vtjnash@gmail.com>
This commit is contained in:
parent
9918a17438
commit
963ecc82d0
@ -52,9 +52,11 @@ UV_UNUSED(static int cmpxchgi(int* ptr, int oldval, int newval)) {
|
||||
|
||||
UV_UNUSED(static void cpu_relax(void)) {
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
__asm__ __volatile__ ("rep; nop"); /* a.k.a. PAUSE */
|
||||
__asm__ __volatile__ ("rep; nop" ::: "memory"); /* a.k.a. PAUSE */
|
||||
#elif (defined(__arm__) && __ARM_ARCH >= 7) || defined(__aarch64__)
|
||||
__asm__ volatile("yield");
|
||||
__asm__ __volatile__ ("yield" ::: "memory");
|
||||
#elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__)
|
||||
__asm__ __volatile__ ("or 1,1,1; or 2,2,2" ::: "memory");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user