diff --git a/glide2x/h3/minihwc/minihwc.c b/glide2x/h3/minihwc/minihwc.c index bea6e66..54de53b 100644 --- a/glide2x/h3/minihwc/minihwc.c +++ b/glide2x/h3/minihwc/minihwc.c @@ -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 */