xref: /dflybsd-src/sys/cpu/x86_64/include/alignbytes.h (revision f7aae1f1815cdcaa49887c3ea201b470db093355)
1*f7aae1f1Szrj /*
2*f7aae1f1Szrj  * Copyright (c) 2019 The DragonFly Project.  All rights reserved.
3*f7aae1f1Szrj  *
4*f7aae1f1Szrj  * Redistribution and use in source and binary forms, with or without
5*f7aae1f1Szrj  * modification, are permitted provided that the following conditions
6*f7aae1f1Szrj  * are met:
7*f7aae1f1Szrj  * 1. Redistributions of source code must retain the above copyright
8*f7aae1f1Szrj  *    notice, this list of conditions and the following disclaimer.
9*f7aae1f1Szrj  * 2. Redistributions in binary form must reproduce the above copyright
10*f7aae1f1Szrj  *    notice, this list of conditions and the following disclaimer in the
11*f7aae1f1Szrj  *    documentation and/or other materials provided with the distribution.
12*f7aae1f1Szrj  *
13*f7aae1f1Szrj  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
14*f7aae1f1Szrj  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
15*f7aae1f1Szrj  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
16*f7aae1f1Szrj  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
17*f7aae1f1Szrj  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
18*f7aae1f1Szrj  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
19*f7aae1f1Szrj  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20*f7aae1f1Szrj  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
21*f7aae1f1Szrj  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22*f7aae1f1Szrj  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
23*f7aae1f1Szrj  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*f7aae1f1Szrj  * SUCH DAMAGE.
25*f7aae1f1Szrj  */
26*f7aae1f1Szrj 
27*f7aae1f1Szrj #ifndef _CPU_ALIGNBYTES_H_
28*f7aae1f1Szrj #define _CPU_ALIGNBYTES_H_
29*f7aae1f1Szrj 
30*f7aae1f1Szrj /*
31*f7aae1f1Szrj  * __ALIGNPTR(p) rounds p (pointer or byte index) up to a correctly-aligned
32*f7aae1f1Szrj  * value for all data types (int, long, ...).   The result is an
33*f7aae1f1Szrj  * unsigned long and must be cast to any desired pointer type.
34*f7aae1f1Szrj  */
35*f7aae1f1Szrj #define __ALIGNBYTES	(sizeof(long) - 1)
36*f7aae1f1Szrj #define __ALIGNPTR(p)	(((unsigned long)(p) + __ALIGNBYTES) & ~__ALIGNBYTES)
37*f7aae1f1Szrj 
38*f7aae1f1Szrj #endif /* !_CPU_ALIGNBYTES_H_ */
39