Summary:Found this hunting down LockFreeRingBuffer iOS perf problems. `wfe` and `yield` are similar, but `yield` is the instruction meant for "hey, I'm doing a spinlock", whereas `wfe` tries to wait for certain processor events. See http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cjafcggi.html
Conveniently, it's the same instruction on 32-bit and 64-bit ARM.
Reviewed By: yfeldblum
Differential Revision:
D2986160
fb-gh-sync-id:
34671256112e605bf857f9db54a56cf6bb6f1ee2
shipit-source-id:
34671256112e605bf857f9db54a56cf6bb6f1ee2
::_mm_pause();
#elif defined(__i386__) || FOLLY_X64
asm volatile ("pause");
-#elif FOLLY_A64
- asm volatile ("wfe");
+#elif FOLLY_A64 || defined(__arm__)
+ asm volatile ("yield");
#elif FOLLY_PPC64
asm volatile("or 27,27,27");
#endif
::_mm_pause();
#elif defined(__i386__) || FOLLY_X64
asm ("pause");
-#elif FOLLY_A64
- asm ("wfe");
+#elif FOLLY_A64 || defined(__arm__)
+ asm ("yield");
#elif FOLLY_PPC64
asm ("or 31,31,31");
#endif