Move __clrex/__ldrex/__strex to synchronization.h

This commit is contained in:
fincs 2015-09-30 00:20:05 +02:00
parent 95f63f280d
commit 72ea825b2d
2 changed files with 19 additions and 19 deletions

View File

@ -9,6 +9,25 @@ typedef struct
u32 counter;
} RecursiveLock;
static inline void __clrex(void)
{
__asm__ __volatile__("clrex");
}
static inline s32 __ldrex(s32* addr)
{
s32 val;
__asm__ __volatile__("ldrex %[val], %[addr]" : [val] "=r" (val) : [addr] "Q" (*addr));
return val;
}
static inline bool __strex(s32* addr, s32 val)
{
bool res;
__asm__ __volatile__("strex %[res], %[val], %[addr]" : [res] "=&r" (res) : [val] "r" (val), [addr] "Q" (*addr));
return res;
}
void LightLock_Init(LightLock* lock);
void LightLock_Lock(LightLock* lock);
void LightLock_Unlock(LightLock* lock);

View File

@ -16,25 +16,6 @@ void __sync_fini(void)
svcCloseHandle(arbiter);
}
static inline void __clrex(void)
{
__asm__ __volatile__("clrex");
}
static inline s32 __ldrex(s32* addr)
{
s32 val;
__asm__ __volatile__("ldrex %[val], [%[addr]]" : [val] "=r" (val) : [addr] "r" (addr));
return val;
}
static inline bool __strex(s32* addr, s32 val)
{
bool res;
__asm__ __volatile__("strex %[res], %[val], [%[addr]]" : [res] "=&r" (res) : [val] "r" (val), [addr] "r" (addr));
return res;
}
void LightLock_Init(LightLock* lock)
{
do