glide2x, h3,minihwc: add p6fence stuff for linux, gcc & co.

This commit is contained in:
sezero
2018-08-17 23:21:50 +03:00
parent fe99a42068
commit 60d8447b98

View File

@@ -447,11 +447,9 @@ static char errorString[1024];
static int num_monitor = 0;
static FxU32 __attribute_used fenceVar;
#if defined(__WATCOMC__)
/*
* P6 Fence
*
*
* Here's the stuff to do P6 Fencing. This is required for the
* certain things on the P6
*
@@ -459,18 +457,24 @@ static FxU32 __attribute_used fenceVar;
* This was yoinked from sst1/include/sst1init.h, and should be
* merged back into something if we decide that we need it later.
*/
void
p6Fence(void);
#if defined(__WATCOMC__)
void p6Fence(void);
#pragma aux p6Fence = \
"xchg eax, fenceVar" \
modify [eax];
"xchg eax, fenceVar" \
modify [eax];
#define P6FENCE p6Fence()
#elif defined(__MSC__)
#define P6FENCE {_asm xchg eax, fenceVar}
#elif defined(__POWERPC__) && defined(__MWERKS__)
#define P6FENCE __eieio()
#elif defined(__DJGPP__) || defined (__MINGW32__)
#define P6FENCE __asm __volatile ("xchg %%eax, _fenceVar":::"%eax")
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
#define P6FENCE __asm __volatile ("xchg %%eax, fenceVar":::"%eax")
#elif defined(__GNUC__) && defined(__ia64__)
# define P6FENCE asm volatile ("mf.a" ::: "memory");
#elif defined(__GNUC__) && defined(__alpha__)
# define P6FENCE asm volatile("mb" ::: "memory");
#else
#error "P6 Fencing in-line assembler code needs to be added for this compiler"
#endif /* Compiler specific fence commands */