diff --git a/moo/lib/moo-cmn.h b/moo/lib/moo-cmn.h index af9bcba..125d2cb 100644 --- a/moo/lib/moo-cmn.h +++ b/moo/lib/moo-cmn.h @@ -628,6 +628,15 @@ typedef struct moo_t moo_t; #define MOO_TYPE_MIN(type) \ ((MOO_TYPE_IS_SIGNED(type)? MOO_TYPE_SIGNED_MIN(type): MOO_TYPE_UNSIGNED_MIN(type))) +/* round up a positive integer x to the nearst multiple of y */ +#define MOO_ALIGN(x,y) ((((x) + (y) - 1) / (y)) * (y)) + +/* round up a positive integer x to the nearst multiple of y where + * y must be a multiple of a power of 2*/ +#define MOO_ALIGN_POW2(x,y) ((((x) + (y) - 1)) & ~((y) - 1)) + +#define MOO_IS_UNALIGNED_POW2(x,y) ((x) & ((y) - 1)) +#define MOO_IS_ALIGNED_POW2(x,y) (!MOO_IS_UNALIGNED_POW2(x,y)) /* ========================================================================= * COMPILER FEATURE TEST MACROS diff --git a/moo/lib/moo-prv.h b/moo/lib/moo-prv.h index 43114c6..97dddd9 100644 --- a/moo/lib/moo-prv.h +++ b/moo/lib/moo-prv.h @@ -102,8 +102,6 @@ # define MOO_MEMCMP(dst,src,size) memcmp(dst,src,size) #endif -#define MOO_ALIGN(x,y) ((((x) + (y) - 1) / (y)) * (y)) - /* ========================================================================= */ /* CLASS SPEC ENCODING */ @@ -113,7 +111,7 @@ * The spec field of a class object encodes the number of the fixed part * and the type of the indexed part. The fixed part is the number of * named instance variables. If the spec of a class is indexed, the object - * of the class can be i nstantiated with the size of the indexed part. + * of the class can be instantiated with the size of the indexed part. * * For example, on a platform where sizeof(moo_oow_t) is 4, * the layout of the spec field of a class as an OOP value looks like this: