1 /* 2 * This file has been generated automatically 3 * by @(#)align_test.c 1.26 09/11/07 Copyright 1995-2009 J. Schilling 4 * do not edit by hand. 5 */ 6 7 #define ALIGN_SHORT 2 /* alignment value for (short *) */ 8 #define ALIGN_SMASK 1 /* alignment mask for (short *) */ 9 10 #define ALIGN_INT 4 /* alignment value for (int *) */ 11 #define ALIGN_IMASK 3 /* alignment mask for (int *) */ 12 13 #define ALIGN_LONG 8 /* alignment value for (long *) */ 14 #define ALIGN_LMASK 7 /* alignment mask for (long *) */ 15 16 #define ALIGN_LLONG 8 /* alignment value for (long long *) */ 17 #define ALIGN_LLMASK 7 /* alignment mask for (long long *) */ 18 19 #define ALIGN_FLOAT 8 /* alignment value for (float *) */ 20 #define ALIGN_FMASK 7 /* alignment mask for (float *) */ 21 22 #define ALIGN_DOUBLE 8 /* alignment value for (double *) */ 23 #define ALIGN_DMASK 7 /* alignment mask for (double *) */ 24 25 #define ALIGN_LDOUBLE 16 /* alignment value for (long double *) */ 26 #define ALIGN_LDMASK 15 /* alignment mask for (long double *) */ 27 28 #define ALIGN_PTR 8 /* alignment value for (pointer *) */ 29 #define ALIGN_PMASK 7 /* alignment mask for (pointer *) */ 30 31 #define ALIGN_TMAX 16 /* alignment value for (max type *) */ 32 #define ALIGN_TMMASK 15 /* alignment mask for (max type *) */ 33 34 35 /* 36 * There used to be a cast to an int but we get a warning from GCC. 37 * This warning message from GCC is wrong. 38 * Believe me that this macro would even be usable if I would cast to short. 39 * In order to avoid this warning, we are now using UIntptr_t 40 */ 41 #define xaligned(a, s) ((((UIntptr_t)(a)) & (s)) == 0 ) 42 #define x2aligned(a, b, s) (((((UIntptr_t)(a)) | ((UIntptr_t)(b))) & (s)) == 0 ) 43 44 #define saligned(a) xaligned(a, ALIGN_SMASK) 45 #define s2aligned(a, b) x2aligned(a, b, ALIGN_SMASK) 46 47 #define ialigned(a) xaligned(a, ALIGN_IMASK) 48 #define i2aligned(a, b) x2aligned(a, b, ALIGN_IMASK) 49 50 #define laligned(a) xaligned(a, ALIGN_LMASK) 51 #define l2aligned(a, b) x2aligned(a, b, ALIGN_LMASK) 52 53 #define llaligned(a) xaligned(a, ALIGN_LLMASK) 54 #define ll2aligned(a, b) x2aligned(a, b, ALIGN_LLMASK) 55 56 #define faligned(a) xaligned(a, ALIGN_FMASK) 57 #define f2aligned(a, b) x2aligned(a, b, ALIGN_FMASK) 58 59 #define daligned(a) xaligned(a, ALIGN_DMASK) 60 #define d2aligned(a, b) x2aligned(a, b, ALIGN_DMASK) 61 62 #define ldaligned(a) xaligned(a, ALIGN_LDMASK) 63 #define ld2aligned(a, b) x2aligned(a, b, ALIGN_LDMASK) 64 65 #define paligned(a) xaligned(a, ALIGN_PMASK) 66 #define p2aligned(a, b) x2aligned(a, b, ALIGN_PMASK) 67 68 #define maligned(a) xaligned(a, ALIGN_TMMASK) 69 #define m2aligned(a, b) x2aligned(a, b, ALIGN_TMMASK) 70 71 72 /* 73 * There used to be a cast to an int but we get a warning from GCC. 74 * This warning message from GCC is wrong. 75 * Believe me that this macro would even be usable if I would cast to short. 76 * In order to avoid this warning, we are now using UIntptr_t 77 */ 78 #define xalign(x, a, m) ( ((char *)(x)) + ( (a) - 1 - ((((UIntptr_t)(x))-1)&(m))) ) 79 80 #define salign(x) xalign((x), ALIGN_SHORT, ALIGN_SMASK) 81 #define ialign(x) xalign((x), ALIGN_INT, ALIGN_IMASK) 82 #define lalign(x) xalign((x), ALIGN_LONG, ALIGN_LMASK) 83 #define llalign(x) xalign((x), ALIGN_LLONG, ALIGN_LLMASK) 84 #define falign(x) xalign((x), ALIGN_FLOAT, ALIGN_FMASK) 85 #define dalign(x) xalign((x), ALIGN_DOUBLE, ALIGN_DMASK) 86 #define ldalign(x) xalign((x), ALIGN_LDOUBLE, ALIGN_LDMASK) 87 #define palign(x) xalign((x), ALIGN_PTR, ALIGN_PMASK) 88 #define malign(x) xalign((x), ALIGN_TMAX, ALIGN_TMMASK) 89