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