X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Fbitset_std.h;h=8d94b2fde2540d4a56735c28fb0604465ab5742e;hb=14e0a034453bd8426ad675a5077c40aa91991e29;hp=2253c27d2a6365af7542f915d1d5c9497b5a7ab2;hpb=e1308e58f7c4e93f3fdc9dabb63a1fe084c1f7b6;p=libfirm diff --git a/ir/adt/bitset_std.h b/ir/adt/bitset_std.h index 2253c27d2..8d94b2fde 100644 --- a/ir/adt/bitset_std.h +++ b/ir/adt/bitset_std.h @@ -1,32 +1,38 @@ +/** Use ordinary ints as unit types. */ +typedef unsigned int bitset_unit_t; + +#define BITSET_UNIT_FMT "%0x" +#define BITSET_UNIT_ALL_ONE ((unsigned int) -1) + /** * Units needed for a given highest bit. * This implementation always allocates units in a multiple of 16 bytes. - * @param highest_bit The highest bit that should be storable. + * @param size The size of the bitset in bits. * @return The number of units needed. */ -#define _bitset_units(highest_bit) (round_up2(highest_bit, BS_UNIT_SIZE_BITS) / BS_UNIT_SIZE_BITS) +#define _bitset_units(size) (round_up2(size, BS_UNIT_SIZE_BITS) / BS_UNIT_SIZE_BITS) /** * Compute the size in bytes needed for a bitseti, overall. * This also include the size for the bitset data structure. * This implementation computes the size in wat, that the bitset units * can be aligned to 16 bytes. - * @param highest_bit The highest bit that shall be storable. + * @param size The size of the bitset in bits. * @return The overall amount of bytes needed for that bitset. */ -#define _bitset_overall_size(bitset_base_size,highest_bit) \ - (bitset_base_size + _bitset_units(highest_bit) * BS_UNIT_SIZE) +#define _bitset_overall_size(bitset_base_size,size) \ + (bitset_base_size + _bitset_units(size) * BS_UNIT_SIZE) /** * calculate the pointer to the data space of the bitset. * @param data The base address of the allocated memory * @param bitset_base_size The size of the basical bitset data structure - * which hast to be taken into account. - * @param hightest_bit The highest bit that will occur in the bitset. + * which has to be taken into account. + * @param size The size of the bitset in bits. */ -#define _bitset_data_ptr(data,bitset_base_size,highest_bit) \ - ((unsigned long *) ((char *) data + bitset_base_size)) +#define _bitset_data_ptr(data,bitset_base_size,size) \ + ((bitset_unit_t *) ((char *) data + bitset_base_size)) /** @@ -58,6 +64,12 @@ */ #define _bitset_inside_flip(unit_ptr,bit) (*unit_ptr) ^= ~(1 << (bit)) +/** + * Flip a whole unit. + * @param unit_ptr The pointer to the unit. + */ +#define _bitset_inside_flip_unit(unit_ptr) (*unit_ptr) = ~(*unit_ptr) + /** * Count the number of leading zeroes in a unit. * @param unit A pointer to the unit. @@ -72,10 +84,10 @@ * @return The Number of leading zeroes. */ #define _bitset_inside_ntz(unit_ptr) _bitset_std_inside_ntz(unit_ptr) -static INLINE int _bitset_std_inside_ntz(unsigned long *unit_ptr) +static INLINE bitset_pos_t _bitset_std_inside_ntz(bitset_unit_t *unit_ptr) { unsigned long data = *unit_ptr; - return 32 - nlz(~data & (data - 1)); + return 32 - (bitset_pos_t) nlz(~data & (data - 1)); } /**