atomic: Fight with all the assemblers that don't like REP NOP. :/
parent
5f123e31a3
commit
58168a8c3c
|
@ -122,12 +122,13 @@ SDL_AtomicTryLock(SDL_SpinLock *lock)
|
||||||
|
|
||||||
/* "REP NOP" is PAUSE, coded for tools that don't know it by that name. */
|
/* "REP NOP" is PAUSE, coded for tools that don't know it by that name. */
|
||||||
#if (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))
|
#if (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))
|
||||||
#define PAUSE_INSTRUCTION() __asm__ __volatile__("rep nop\n")
|
#define PAUSE_INSTRUCTION() __asm__ __volatile__("pause\n") /* Clang lets you do REP NOP, GCC wants PAUSE. */
|
||||||
#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
|
#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
|
||||||
#define PAUSE_INSRUCTION() _mm_pause() /* this is actually "rep nop" and not a SIMD instruction. */
|
#define PAUSE_INSRUCTION() _mm_pause() /* this is actually "rep nop" and not a SIMD instruction. No inline asm in MSVC x86-64! */
|
||||||
#elif defined(__WATCOMC__) && defined(__386__)
|
#elif defined(__WATCOMC__) && defined(__386__)
|
||||||
|
/* watcom assembler won't let you do PAUSE, but refuses REP NOP as an invalid combination. Hardcode the bytes. */
|
||||||
extern _inline void PAUSE_INSTRUCTION(void);
|
extern _inline void PAUSE_INSTRUCTION(void);
|
||||||
#pragma aux PAUSE_INSTRUCTION = "rep nop"
|
#pragma aux PAUSE_INSTRUCTION = "db 0f3h,90h"
|
||||||
#else
|
#else
|
||||||
#define PAUSE_INSTRUCTION()
|
#define PAUSE_INSTRUCTION()
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue