Ejemplo n.º 1
0
//Retain (extension)
void x_retain(void *in_o)
{
	memory_pvt *r = (memory_pvt*)in_o;
#ifdef CELL
	__sync_fetch_and_add(&r[-1].rc, 1);
#else
	OSAtomicAdd32Barrier(1, &r[-1].rc);
#endif
}
Ejemplo n.º 2
0
//------------------------------------------------------------------------
int32 FAtomicAdd (volatile int32& var, int32 d)
{
#if WINDOWS
	return InterlockedExchangeAdd (&var, d);
#elif MAC
	return OSAtomicAdd32Barrier (d, NATIVE_ATOMIC_TYPE &var) - d;
#else
	int32 v = var;
	var += d;
	return v;
#endif
}
Ejemplo n.º 3
0
//Replacment free function
void x_free(void *in_o)
{
	memory_pvt *r = (memory_pvt*)in_o;

#ifdef CELL
	int nVal = __sync_fetch_and_add(&r[-1].rc, -1) -1;
#else
	int nVal = OSAtomicAdd32Barrier(-1, &r[-1].rc);
#endif

	if (nVal == 0)
	{
		r[-1].kill(in_o);
		free(r-1);
	}
}
Ejemplo n.º 4
0
Archivo: ia32.cpp Proyecto: Marlinc/0ad
intptr_t cpu_AtomicAdd(volatile intptr_t* location, intptr_t increment)
{
	cassert(sizeof(intptr_t) == sizeof(int32_t));
	return OSAtomicAdd32Barrier(increment, (volatile int32_t*)location);
}
Ejemplo n.º 5
0
int32_t __sync_sub_and_fetch_4 (int32_t *ptr, int32_t value, ...)
{
    return OSAtomicAdd32Barrier(-value, ptr);
}
Ejemplo n.º 6
0
int32_t __sync_fetch_and_add_4 (int32_t *ptr, int32_t value, ...)
{
    return OSAtomicAdd32Barrier(value, ptr) - value;
}
Ejemplo n.º 7
0
int32_t OSAtomicDecrement32Barrier(volatile int32_t* target) {
    OSAtomicAdd32Barrier(-1,target);
}
Ejemplo n.º 8
0
int32_t TS_AtomicSub(TS_Atomic32 * aTo, int32_t aToSub){
    return OSAtomicAdd32Barrier(-aToSub, aTo);
}
Ejemplo n.º 9
0
int32_t TS_AtomicAdd(TS_Atomic32 * aTo, int32_t aToAdd){
    return OSAtomicAdd32Barrier(aToAdd, aTo);
}