From 273d9e46400994691e2f1b4d7b11b896d6acdd73 Mon Sep 17 00:00:00 2001 From: Francisco Javier Trujillo Mata Date: Mon, 6 Jun 2022 00:00:45 +0200 Subject: [PATCH] Fix atomic support for PS2 --- src/atomic/SDL_spinlock.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/atomic/SDL_spinlock.c b/src/atomic/SDL_spinlock.c index bdd347e41..f9877c3fe 100644 --- a/src/atomic/SDL_spinlock.c +++ b/src/atomic/SDL_spinlock.c @@ -40,6 +40,10 @@ #include #endif +#if defined(PS2) +#include +#endif + #if defined(__WATCOMC__) && defined(__386__) SDL_COMPILE_TIME_ASSERT(locksize, 4==sizeof(SDL_SpinLock)); extern __inline int _SDL_xchg_watcom(volatile int *a, int v); @@ -131,7 +135,19 @@ SDL_AtomicTryLock(SDL_SpinLock *lock) #elif defined(__SOLARIS__) && !defined(_LP64) /* Used for Solaris with non-gcc compilers. */ return (SDL_bool) ((int) atomic_cas_32((volatile uint32_t*)lock, 0, 1) == 0); +#elif defined(PS2) + uint32_t oldintr; + SDL_bool res = SDL_FALSE; + // disable interuption + oldintr = DIntr(); + if (*lock == 0) { + *lock = 1; + res = SDL_TRUE; + } + // enable interuption + if(oldintr) { EIntr(); } + return res; #else #error Please implement for your platform. return SDL_FALSE;