}
#endif /* SILC_ATOMIC_MUTEX */
-SILC_ATOMIC_INIT(8, 8, SilcUInt8);
-SILC_ATOMIC_INIT(16, 16, SilcUInt16);
-SILC_ATOMIC_INIT(32, 32, SilcUInt32);
-SILC_ATOMIC_INIT(_pointer, Pointer, void *);
+SILC_ATOMIC_INIT(8, 8, SilcUInt8)
+SILC_ATOMIC_INIT(16, 16, SilcUInt16)
+SILC_ATOMIC_INIT(32, 32, SilcUInt32)
+SILC_ATOMIC_INIT(_pointer, Pointer, void *)
/****f* silcutil/SilcAtomicAPI/silc_atomic_uninit32
*
#define SILC_ATOMIC_UNINIT(bits, t) \
SILC_ATOMIC_UNINIT_F(bits, t) \
{ \
+ memset(atomic, 0, sizeof(*atomic)); \
}
#endif /* SILC_ATOMIC_MUTEX */
-SILC_ATOMIC_UNINIT(8, 8);
-SILC_ATOMIC_UNINIT(16, 16);
-SILC_ATOMIC_UNINIT(32, 32);
-SILC_ATOMIC_UNINIT(_pointer, Pointer);
+SILC_ATOMIC_UNINIT(8, 8)
+SILC_ATOMIC_UNINIT(16, 16)
+SILC_ATOMIC_UNINIT(32, 32)
+SILC_ATOMIC_UNINIT(_pointer, Pointer)
/****f* silcutil/SilcAtomicAPI/silc_atomic_set_int32
*
SILC_ATOMIC_SET_INT_F(bits) \
{ \
/* Windows */ \
- InterlockedExchange((LONG)&atomic->value, (LONG)value); \
+ InterlockedExchange((LONG *)&atomic->value, (LONG)value); \
}
#elif defined(__GNUC__) && (defined(SILC_I486) || defined(SILC_X86_64))
}
#endif /* !SILC_THREADS */
-SILC_ATOMIC_SET_INT(8, "b", "b");
-SILC_ATOMIC_SET_INT(16, "w", "w");
-SILC_ATOMIC_SET_INT(32, "l", "");
+SILC_ATOMIC_SET_INT(8, "b", "b")
+SILC_ATOMIC_SET_INT(16, "w", "w")
+SILC_ATOMIC_SET_INT(32, "l", "")
/****f* silcutil/SilcAtomicAPI/silc_atomic_set_pointer
*
}
#endif /* !SILC_THREADS */
-SILC_ATOMIC_GET_INT(8);
-SILC_ATOMIC_GET_INT(16);
-SILC_ATOMIC_GET_INT(32);
+SILC_ATOMIC_GET_INT(8)
+SILC_ATOMIC_GET_INT(16)
+SILC_ATOMIC_GET_INT(32)
/****f* silcutil/SilcAtomicAPI/silc_atomic_get_pointer
*
SILC_ATOMIC_ADD_INT_F(bits) \
{ \
SilcUInt##bits ret; \
- SilcInt32 val = value;
+ SilcInt32 val = value; \
/* GCC + IA64 (GCC builtin atomic operations) */ \
ret = __sync_fetch_and_add(&atomic->value, val); \
return ret + value; \
}
#endif /* !SILC_THREADS */
-SILC_ATOMIC_ADD_INT(8, "b");
-SILC_ATOMIC_ADD_INT(16, "w");
-SILC_ATOMIC_ADD_INT(32, "l");
+SILC_ATOMIC_ADD_INT(8, "b")
+SILC_ATOMIC_ADD_INT(16, "w")
+SILC_ATOMIC_ADD_INT(32, "l")
/****f* silcutil/SilcAtomicAPI/silc_atomic_sub_int32
*
SILC_ATOMIC_INC_F(bits) \
{ \
/* Windows */ \
- InterlockedIncrement((LONG)&atomic->value); \
+ InterlockedIncrement((LONG *)&atomic->value); \
}
#elif defined(__GNUC__) && (defined(SILC_I486) || defined(SILC_X86_64))
}
#endif /* !SILC_THREADS */
-SILC_ATOMIC_INC(8, "b");
-SILC_ATOMIC_INC(16, "w");
-SILC_ATOMIC_INC(32, "l");
+SILC_ATOMIC_INC(8, "b")
+SILC_ATOMIC_INC(16, "w")
+SILC_ATOMIC_INC(32, "l")
/****f* silcutil/SilcAtomicAPI/silc_atomic_dec32
*
SILC_ATOMIC_DEC_F(bits) \
{ \
/* Windows */ \
- InterlockedDecrement((LONG)&atomic->value); \
+ InterlockedDecrement((LONG *)&atomic->value); \
}
#elif defined(__GNUC__) && (defined(SILC_I486) || defined(SILC_X86_64))
}
#endif /* !SILC_THREADS */
-SILC_ATOMIC_DEC(8, "b");
-SILC_ATOMIC_DEC(16, "w");
-SILC_ATOMIC_DEC(32, "l");
+SILC_ATOMIC_DEC(8, "b")
+SILC_ATOMIC_DEC(16, "w")
+SILC_ATOMIC_DEC(32, "l")
/****f* silcutil/SilcAtomicAPI/silc_atomic_cas32
*
}
#endif /* !SILC_THREADS */
-SILC_ATOMIC_CAS(8, "b");
-SILC_ATOMIC_CAS(16, "w");
-SILC_ATOMIC_CAS(32, "l");
+SILC_ATOMIC_CAS(8, "b")
+SILC_ATOMIC_CAS(16, "w")
+SILC_ATOMIC_CAS(32, "l")
/****f* silcutil/SilcAtomicAPI/silc_atomic_cas_pointer
*
#elif defined(SILC_WIN32)
/* Windows */
- return InterlockedCompareExchangePointer(&atomic->value, n, o) == o;
+ return InterlockedCompareExchangePointer(&atomic->value, new_val, old_val)
+ == old_val;
#elif defined(__GNUC__) && defined(SILC_I486)
/* GCC + i486 */
#elif defined(__GNUC__) && defined(SILC_IA64)
/* GCC + IA64 (GCC builtin atomic operations) */
- return __sync_bool_compare_and_swap((long)&atomic->value, (long)old_val,
+ return __sync_bool_compare_and_swap((long *)&atomic->value, (long)old_val,
(long)new_val);
#elif defined(__GNUC__) && defined(SILC_POWERPC)