I made some thread Lock changes and implemented a port of gnu's atomic intrinsic code to handle various stuff like incrementing pointers.
Doom3 is now so fast it scares even me
And it runs totally fluid with sikkmods heavies enabled woa
Atm im using the intrinsics for heap managment.
Code looks like this.
Code: Select all
/*
================================================================================================
GNU Atomic Intrinsics
================================================================================================
*/
// missing in msvc
#if defined(_MSC_VER)
#pragma intrinsic (_InterlockedExchange)
#pragma intrinsic (_InterlockedExchangeAdd)
#pragma intrinsic (_InterlockedCompareExchange)
ID_FORCE_INLINE int __sync_lock_test_and_set(int *addr, int val)
{
return static_cast< int >(_InterlockedExchange(reinterpret_cast< long * >(addr), static_cast< long >(val)));
}
ID_FORCE_INLINE int __sync_fetch_and_add(int *addr, int val)
{
return static_cast< int >(_InterlockedExchangeAdd(reinterpret_cast< long * >(addr), static_cast< long >(val)));
}
ID_FORCE_INLINE int __sync_val_compare_and_swap(volatile int *addr, int oldval, int newval)
{
return static_cast< int >(_InterlockedCompareExchange(reinterpret_cast< volatile long * >(addr), newval, oldval));
}
#endif