Move __clrex/__ldrex/__strex to synchronization.h
This commit is contained in:
parent
95f63f280d
commit
72ea825b2d
@ -9,6 +9,25 @@ typedef struct
|
|||||||
u32 counter;
|
u32 counter;
|
||||||
} RecursiveLock;
|
} 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_Init(LightLock* lock);
|
||||||
void LightLock_Lock(LightLock* lock);
|
void LightLock_Lock(LightLock* lock);
|
||||||
void LightLock_Unlock(LightLock* lock);
|
void LightLock_Unlock(LightLock* lock);
|
||||||
|
@ -16,25 +16,6 @@ void __sync_fini(void)
|
|||||||
svcCloseHandle(arbiter);
|
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)
|
void LightLock_Init(LightLock* lock)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
|
Loading…
Reference in New Issue
Block a user