12#ifndef __XF_BIT_DEFS_H__
13#define __XF_BIT_DEFS_H__
39#define BIT31 0x80000000
40#define BIT30 0x40000000
41#define BIT29 0x20000000
42#define BIT28 0x10000000
43#define BIT27 0x08000000
44#define BIT26 0x04000000
45#define BIT25 0x02000000
46#define BIT24 0x01000000
47#define BIT23 0x00800000
48#define BIT22 0x00400000
49#define BIT21 0x00200000
50#define BIT20 0x00100000
51#define BIT19 0x00080000
52#define BIT18 0x00040000
53#define BIT17 0x00020000
54#define BIT16 0x00010000
55#define BIT15 0x00008000
56#define BIT14 0x00004000
57#define BIT13 0x00002000
58#define BIT12 0x00001000
59#define BIT11 0x00000800
60#define BIT10 0x00000400
61#define BIT9 0x00000200
62#define BIT8 0x00000100
63#define BIT7 0x00000080
64#define BIT6 0x00000040
65#define BIT5 0x00000020
66#define BIT4 0x00000010
67#define BIT3 0x00000008
68#define BIT2 0x00000004
69#define BIT1 0x00000002
70#define BIT0 0x00000001
82#define BIT63 (0x80000000ULL << 32)
83#define BIT62 (0x40000000ULL << 32)
84#define BIT61 (0x20000000ULL << 32)
85#define BIT60 (0x10000000ULL << 32)
86#define BIT59 (0x08000000ULL << 32)
87#define BIT58 (0x04000000ULL << 32)
88#define BIT57 (0x02000000ULL << 32)
89#define BIT56 (0x01000000ULL << 32)
90#define BIT55 (0x00800000ULL << 32)
91#define BIT54 (0x00400000ULL << 32)
92#define BIT53 (0x00200000ULL << 32)
93#define BIT52 (0x00100000ULL << 32)
94#define BIT51 (0x00080000ULL << 32)
95#define BIT50 (0x00040000ULL << 32)
96#define BIT49 (0x00020000ULL << 32)
97#define BIT48 (0x00010000ULL << 32)
98#define BIT47 (0x00008000ULL << 32)
99#define BIT46 (0x00004000ULL << 32)
100#define BIT45 (0x00002000ULL << 32)
101#define BIT44 (0x00001000ULL << 32)
102#define BIT43 (0x00000800ULL << 32)
103#define BIT42 (0x00000400ULL << 32)
104#define BIT41 (0x00000200ULL << 32)
105#define BIT40 (0x00000100ULL << 32)
106#define BIT39 (0x00000080ULL << 32)
107#define BIT38 (0x00000040ULL << 32)
108#define BIT37 (0x00000020ULL << 32)
109#define BIT36 (0x00000010ULL << 32)
110#define BIT35 (0x00000008ULL << 32)
111#define BIT34 (0x00000004ULL << 32)
112#define BIT33 (0x00000002ULL << 32)
113#define BIT32 (0x00000001ULL << 32)
135#define BIT(nr) (1UL << (nr))
145#define BIT64(nr) (1ULL << (nr))
154#define BIT(nr) (1 << (nr))
168#define BIT_SET0(var, n) ((var) &= ~BIT(n))
178#define BIT_SET1(var, n) ((var) |= BIT(n))
189#define BIT_SET(var, n, value) \
190 ((value) ? BIT_SET1((var), (n)) : BIT_SET0((var), (n)))
200#define BIT_FLIP(var, n) ((var) ^= BIT(n))
212#define BIT_GET(src, n) (((src) & BIT(n)) >> (n))
215#ifndef BIT_GET_MODIFY0
224#define BIT_GET_MODIFY0(src, n) ((src) & ~BIT(n))
227#ifndef BIT_GET_MODIFY1
236#define BIT_GET_MODIFY1(src, n) ((src) | BIT(n))
239#ifndef BIT_GET_MODIFY
249#define BIT_GET_MODIFY(src, n, value) \
250 ((value) ? BIT_GET_MODIFY1((src), (n)) : BIT_GET_MODIFY0((src), (n)))
253#ifndef BIT_GET_MODIFY_FLIP
262#define BIT_GET_MODIFY_FLIP(src, n) ((src) ^ BIT(n))
282#define BITS_MASK(n) (((n) < 32) ? (BIT(n) - 1) : (~0UL))
303#define BITS_SET0(var, bits_mask) ((var) &= ~(bits_mask))
324#define BITS_SET1(var, bits_mask) ((var) |= (bits_mask))
337#define BITS_FLIP(var, bits_mask) ((var) ^= (bits_mask))
362#define BITS_GET(src, n, offset) (((src) & (BITS_MASK(n) << (offset))) >> (offset))
375#define BITS_CHECK(src, bits_mask) (!!((src) & (bits_mask)))
378#ifndef BITS_GET_MODIFY
420#define BITS_GET_MODIFY(src, n, offset, value) \
421 ((((src) ^ ((BITS_MASK(n) & (value)) << (offset))) \
422 & (BITS_MASK(n) << (offset))) \
434#define BITS_SET(src, n, offset, value) \
435 ((src) = BITS_GET_MODIFY((src), (n), (offset), (value)))
预定义. xf_attr.h 等头文件通过包含本文件减少对其余外部文件的直接依赖. 如: xfconfig.h.