xref: /linux/tools/testing/selftests/powerpc/primitives/linux/wordpart.h (revision ae22a94997b8a03dcb3c922857c203246711f9d4)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 
3 #ifndef _LINUX_WORDPART_H
4 #define _LINUX_WORDPART_H
5 
6 /**
7  * upper_32_bits - return bits 32-63 of a number
8  * @n: the number we're accessing
9  *
10  * A basic shift-right of a 64- or 32-bit quantity.  Use this to suppress
11  * the "right shift count >= width of type" warning when that quantity is
12  * 32-bits.
13  */
14 #define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
15 
16 /**
17  * lower_32_bits - return bits 0-31 of a number
18  * @n: the number we're accessing
19  */
20 #define lower_32_bits(n) ((u32)((n) & 0xffffffff))
21 
22 /**
23  * upper_16_bits - return bits 16-31 of a number
24  * @n: the number we're accessing
25  */
26 #define upper_16_bits(n) ((u16)((n) >> 16))
27 
28 /**
29  * lower_16_bits - return bits 0-15 of a number
30  * @n: the number we're accessing
31  */
32 #define lower_16_bits(n) ((u16)((n) & 0xffff))
33 
34 /**
35  * REPEAT_BYTE - repeat the value @x multiple times as an unsigned long value
36  * @x: value to repeat
37  *
38  * NOTE: @x is not checked for > 0xff; larger values produce odd results.
39  */
40 #define REPEAT_BYTE(x)	((~0ul / 0xff) * (x))
41 
42 #endif // _LINUX_WORDPART_H
43