+#ifndef _BITSET_IA32_H
+#define _BITSET_IA32_H
#undef _bitset_inside_clear
#undef _bitset_inside_set
#define _bitset_inside_binop_or(tgt,src) _bitset_sse_inside_binop_or(tgt,src)
#define _bitset_inside_binop_xor(tgt,src) _bitset_sse_inside_binop_xor(tgt,src)
-/* and with zero sets everything to zero. */
-#define _bitset_inside_binop_with_zero_and(tgt) _bitset_sse_inside_binop_with_zero_and(tgt)
-
-/* And Not with 0 is the identity (its like and with 1) */
-#define _bitset_inside_binop_with_zero_andnot(tgt)
-
-/* Or with zero is also the identity */
-#define _bitset_inside_binop_with_zero_or(tgt)
-
-/* Xor with 0 is like negation, we have to do it. */
-#define _bitset_inside_binop_with_zero_xor(tgt) _bitset_sse_inside_binop_with_zero_xor(tgt)
-
#define _BITSET_SSE_BINOP(name) \
static INLINE void _bitset_sse_inside_binop_ ## name(unsigned long *tgt, unsigned long *src) \
{ \
tgt[3] = 0;
}
-static INLINE void _bitset_sse_inside_binop_with_zero_xor(unsigned long *tgt)
-{
- __m128i src_op = _mm_setzero_si128();
- __m128i tgt_op = _mm_load_si128((void *) tgt);
- __m128i res = _mm_xor_si128(tgt_op, src_op);
- _mm_store_si128((__m128i *) tgt, res);
-}
-
static INLINE void _bitset_sse_inside_binop_andnot(unsigned long *tgt, unsigned long *src)
{
__m128i src_op = _mm_load_si128((void *) src);
#endif
+#endif
((unsigned long *) ((char *) data + bitset_base_size))
+/**
+ * Clear some units from a certain address on.
+ * @param addr The address from where to clear.
+ * @param n The number of units to set to 0.
+ */
+#define _bitset_inside_clear_units(addr,n) \
+ memset(addr, 0, n * BS_UNIT_SIZE)
+
/**
* Set a bit in a unit.
* @param unit A pointer to the unit.
#define _bitset_inside_binop_andnot(tgt,src) ((*tgt) &= ~(*src))
#define _bitset_inside_binop_or(tgt,src) ((*tgt) |= (*src))
#define _bitset_inside_binop_xor(tgt,src) ((*tgt) ^= (*src))
-
-#define _bitset_inside_binop_with_zero_and(tgt) ((*tgt) &= 0UL)
-#define _bitset_inside_binop_with_zero_andnot(tgt) ((*tgt) &= ~0UL)
-#define _bitset_inside_binop_with_zero_or(tgt) ((*tgt) |= 0UL)
-#define _bitset_inside_binop_with_zero_xor(tgt) ((*tgt) ^= 0UL)
#ifndef _IMPL_H
#define _IMPL_H
+#define _HEAD1(name,res,t1) \
+ res (name)(t1 p1)
+
+#define _HEAD2(name,res,t1,t2) \
+ res (name)(t1 p1, t2 p2)
+
+#define _HEAD3(name,res,t1,t2,t3) \
+ res (name)(t1 p1, t2 p2, t3 p3)
+
+#define _HEAD4(name,res,t1,t2,t3,t4) \
+ res (name)(t1 p1, t2 p2, t3 p3, t4 p4)
+
+
#define _IMPL1(name,prefix,ret,res,t1) \
-res (name)(t1 p1) { \
+_HEAD1(name, res, t1) { \
ret prefix ## name (p1); \
}
#define _IMPL2(name,prefix,ret,res,t1,t2) \
-res (name)(t1 p1, t2 p2) { \
+_HEAD2(name, res, t1, t2) { \
ret prefix ## name (p1, p2); \
}
#define _IMPL3(name,prefix,ret,res,t1,t2,t3) \
-res (name)(t1 p1, t2 p2, t3 p3) { \
+_HEAD3(name, res, t1, t2, t3) { \
ret prefix ## name (p1, p2, p3); \
}
#define _IMPL4(name,prefix,ret,res,t1,t2,t3,t4) \
-res (name)(t1 p1, t2 p2, t3 p3, t4 p4) { \
+_HEAD4(name, res, t1, t2, t3, t4) { \
ret prefix ## name (p1, p2, p3, p4); \
}
#define FIRM_IMPL4_VOID(name,t1,t2,t3,t4) \
_IMPL4(name, __, (void), void, t1, t2, t3, t4)
+#define FIRM_PROTO1(name,type,t1) _HEAD1(name, type, t1)
+#define FIRM_PROTO2(name,type,t1,t2) _HEAD2(name, type, t1, t2)
+#define FIRM_PROTO3(name,type,t1,t2,t3) _HEAD3(name, type, t1, t2, t3)
+#define FIRM_PROTO4(name,type,t1,t2,t3,t4) _HEAD4(name, type, t1, t2, t3, t4)
+
#endif