+
+static inline unsigned long
+NWORDS(unsigned long x, unsigned long n_bits)
+{
+ /* A good compiler should be able to constant-fold this whole thing,
+ even with the conditional. */
+ if(n_bits <= N_WORD_BITS) {
+ unsigned long elements_per_word = N_WORD_BITS/n_bits;
+
+ return CEILING(x, elements_per_word)/elements_per_word;
+ }
+ else {
+ /* FIXME: should have some sort of assertion that N_WORD_BITS
+ evenly divides n_bits */
+ return x * (n_bits/N_WORD_BITS);
+ }
+}