Go to the source code of this file.
|
| #define | __bf_shf __builtin_ctzll |
| |
| #define | __scalar_type_to_unsigned_cases(type) |
| |
| #define | __unsigned_scalar_typeof(x) |
| |
| #define | __bf_cast_unsigned(type, x) ((__unsigned_scalar_typeof(type))(x)) |
| |
| #define | __BF_FIELD_CHECK_MASK(_mask, _val, _pfx) |
| |
| #define | __BF_FIELD_CHECK_REG(mask, reg, pfx) |
| |
| #define | __BF_FIELD_CHECK(mask, reg, val, pfx) |
| |
| #define | __FIELD_PREP(mask, val, pfx) |
| |
| #define | __FIELD_GET(mask, reg, pfx) |
| |
| #define | FIELD_MAX(_mask) |
| |
| #define | FIELD_FIT(_mask, _val) |
| |
| #define | FIELD_PREP(_mask, _val) |
| |
| #define | __BF_CHECK_POW2(n) BUILD_BUG_ON_ZERO(((n) & ((n) - 1)) != 0) |
| |
| #define | FIELD_PREP_CONST(_mask, _val) |
| |
| #define | FIELD_GET(_mask, _reg) |
| |
| #define | FIELD_GET_SIGNED(mask, reg) |
| |
| #define | FIELD_MODIFY(_mask, _reg_p, _val) |
| |
| #define | field_max(field) ((typeof(field))field_mask(field)) |
| |
| #define | ____MAKE_OP(type, base, to, from) |
| |
| #define | __MAKE_OP(size) |
| |
| #define | __field_prep(mask, val) |
| |
| #define | __field_get(mask, reg) |
| |
| #define | field_prep(mask, val) |
| |
| #define | field_get(mask, reg) |
| |
◆ ____MAKE_OP
| #define ____MAKE_OP |
( |
|
type, |
|
|
|
base, |
|
|
|
to, |
|
|
|
from |
|
) |
| |
Value:
{ \
if (__builtin_constant_p(v) && (v & ~field_mask(field))) \
__field_overflow(); \
return to((v & field_mask(field)) * field_multiplier(field)); \
} \
{ \
return (old & ~to(field)) | type##_encode_bits(val, field); \
} \
{ \
*p = (*p & ~to(field)) | type##_encode_bits(val, field); \
} \
{ \
return (from(v) & field)/field_multiplier(field); \
}
#define __must_check
Definition compiler.h:114
#define __always_inline
Definition compiler_attributes.h:55
struct i915_user_extension base
Definition i915_drm.h:0
◆ __bf_cast_unsigned
◆ __BF_CHECK_POW2
◆ __BF_FIELD_CHECK
| #define __BF_FIELD_CHECK |
( |
|
mask, |
|
|
|
reg, |
|
|
|
val, |
|
|
|
pfx |
|
) |
| |
Value: ({ \
__BF_FIELD_CHECK_MASK(mask, val, pfx); \
__BF_FIELD_CHECK_REG(mask, reg, pfx); \
})
◆ __BF_FIELD_CHECK_MASK
| #define __BF_FIELD_CHECK_MASK |
( |
|
_mask, |
|
|
|
_val, |
|
|
|
_pfx |
|
) |
| |
Value: ({ \
BUILD_BUG_ON_MSG(!__builtin_constant_p(_mask), \
_pfx "mask is not constant"); \
BUILD_BUG_ON_MSG((_mask) == 0, _pfx "mask is zero"); \
BUILD_BUG_ON_MSG(__builtin_constant_p(_val) ? \
(0 + (_val)) : 0, \
_pfx "value too large for the field"); \
__BUILD_BUG_ON_NOT_POWER_OF_2((_mask) + \
})
#define __bf_shf
Definition bitfield.h:47
◆ __BF_FIELD_CHECK_REG
| #define __BF_FIELD_CHECK_REG |
( |
|
mask, |
|
|
|
reg, |
|
|
|
pfx |
|
) |
| |
Value:
pfx "type of reg too small for mask")
#define __bf_cast_unsigned(type, x)
Definition bitfield.h:63
#define BUILD_BUG_ON_MSG(cond, msg)
◆ __bf_shf
| #define __bf_shf __builtin_ctzll |
◆ __field_get
| #define __field_get |
( |
|
mask, |
|
|
|
reg |
|
) |
| |
Value: ({ \
auto __mask = (mask); \
typeof(__mask) __reg = (reg); \
__ffs(__mask) : __ffs64(__mask); \
(__reg & __mask) >> __shift; \
})
#define BITS_PER_TYPE(type)
Definition bitops.h:258
◆ __FIELD_GET
| #define __FIELD_GET |
( |
|
mask, |
|
|
|
reg, |
|
|
|
pfx |
|
) |
| |
Value: ({ \
__BF_FIELD_CHECK_MASK(mask, 0
U, pfx); \
(typeof(mask))(((reg) & (mask)) >>
__bf_shf(mask)); \
})
#define U
Definition libunicode.c:1830
◆ __field_prep
| #define __field_prep |
( |
|
mask, |
|
|
|
val |
|
) |
| |
Value: ({ \
auto __mask = (mask); \
typeof(__mask) __val = (val); \
__ffs(__mask) : __ffs64(__mask); \
(__val << __shift) & __mask; \
})
◆ __FIELD_PREP
| #define __FIELD_PREP |
( |
|
mask, |
|
|
|
val, |
|
|
|
pfx |
|
) |
| |
Value: ({ \
__BF_FIELD_CHECK_MASK(mask, val, pfx); \
((typeof(mask))(val) <<
__bf_shf(mask)) & (mask); \
})
◆ __MAKE_OP
| #define __MAKE_OP |
( |
|
size | ) |
|
Value:
#define ____MAKE_OP(type, base, to, from)
Definition bitfield.h:229
size_t size
Definition drm_bridge.h:1299
◆ __scalar_type_to_unsigned_cases
| #define __scalar_type_to_unsigned_cases |
( |
|
type | ) |
|
Value: unsigned type: (unsigned type)0, \
signed type: (unsigned type)0
◆ __unsigned_scalar_typeof
| #define __unsigned_scalar_typeof |
( |
|
x | ) |
|
Value: typeof( \
_Generic((x), \
char: (unsigned char)0, \
#define __scalar_type_to_unsigned_cases(type)
Definition bitfield.h:49
int x
Definition layout.c:118
◆ FIELD_FIT
| #define FIELD_FIT |
( |
|
_mask, |
|
|
|
_val |
|
) |
| |
Value: ({ \
__BF_FIELD_CHECK(_mask, 0
ULL, 0
ULL,
"FIELD_FIT: "); \
!((((typeof(_mask))_val) <<
__bf_shf(_mask)) & ~(_mask)); \
})
#define ULL(x)
Definition const.h:79
FIELD_FIT() - check if value fits in the field @_mask: shifted mask defining the field's length and position @_val: value to test against the field
Return: true if @_val can fit inside @_mask, false if @_val is too big.
◆ FIELD_GET
| #define FIELD_GET |
( |
|
_mask, |
|
|
|
_reg |
|
) |
| |
Value: ({ \
__BF_FIELD_CHECK_REG(_mask, _reg, "FIELD_GET: "); \
__FIELD_GET(_mask, _reg, "FIELD_GET: "); \
})
FIELD_GET() - extract a bitfield element @_mask: shifted mask defining the field's length and position @_reg: value of entire bitfield
FIELD_GET() extracts the field specified by @_mask from the bitfield passed in as @_reg by masking and shifting it down.
◆ field_get
| #define field_get |
( |
|
mask, |
|
|
|
reg |
|
) |
| |
Value: (__builtin_constant_p(mask) ?
__FIELD_GET(mask, reg,
"field_get: ") \
#define __field_get(mask, reg)
Definition bitfield.h:270
#define __FIELD_GET(mask, reg, pfx)
Definition bitfield.h:95
field_get() - extract a bitfield element @mask: shifted mask defining the field's length and position, must be non-zero @reg: value of entire bitfield
Return: extracted field value
field_get() extracts the field specified by @mask from the bitfield passed in as @reg by masking and shifting it down. Unlike FIELD_GET(), @mask is not limited to a compile-time constant. Typical usage patterns are a value stored in a table, or calculated by shifting a constant by a variable number of bits. If you want to ensure that @mask is a compile-time constant, please use FIELD_GET() directly instead.
◆ FIELD_GET_SIGNED
| #define FIELD_GET_SIGNED |
( |
|
mask, |
|
|
|
reg |
|
) |
| |
Value: ({ \
__BF_FIELD_CHECK(mask, reg, 0
U,
"FIELD_GET_SIGNED: "); \
(((long long)(reg) << __builtin_clzll(mask)) >> \
(__builtin_clzll(mask) + __builtin_ctzll(mask)))); \
})
#define __signed_scalar_typeof(x)
Definition compiler_types.h:651
FIELD_GET_SIGNED() - extract a signed bitfield element @mask: shifted mask defining the field's length and position @reg: value of entire bitfield
Returns the sign-extended field specified by @_mask from the bitfield passed in as @reg by masking and shifting it down.
◆ FIELD_MAX
| #define FIELD_MAX |
( |
|
_mask | ) |
|
Value: ({ \
__BF_FIELD_CHECK(_mask, 0
ULL, 0
ULL,
"FIELD_MAX: "); \
(typeof(_mask))((_mask) >>
__bf_shf(_mask)); \
})
FIELD_MAX() - produce the maximum value representable by a field @_mask: shifted mask defining the field's length and position
FIELD_MAX() returns the maximum value that can be held in the field specified by @_mask.
◆ field_max
| #define field_max |
( |
|
field | ) |
((typeof(field))field_mask(field)) |
◆ FIELD_MODIFY
| #define FIELD_MODIFY |
( |
|
_mask, |
|
|
|
_reg_p, |
|
|
|
_val |
|
) |
| |
Value: ({ \
typecheck_pointer(_reg_p); \
__BF_FIELD_CHECK(_mask, *(_reg_p), _val, "FIELD_MODIFY: "); \
*(_reg_p) &= ~(_mask); \
*(_reg_p) |= (((typeof(_mask))(_val) <<
__bf_shf(_mask)) & (_mask)); \
})
FIELD_MODIFY() - modify a bitfield element @_mask: shifted mask defining the field's length and position @_reg_p: pointer to the memory that should be updated @_val: value to store in the bitfield
FIELD_MODIFY() modifies the set of bits in @_reg_p specified by @_mask, by replacing them with the bitfield value passed in as @_val.
◆ FIELD_PREP
| #define FIELD_PREP |
( |
|
_mask, |
|
|
|
_val |
|
) |
| |
Value: ({ \
__BF_FIELD_CHECK_REG(_mask, 0
ULL,
"FIELD_PREP: "); \
__FIELD_PREP(_mask, _val, "FIELD_PREP: "); \
})
FIELD_PREP() - prepare a bitfield element @_mask: shifted mask defining the field's length and position @_val: value to put in the field
FIELD_PREP() masks and shifts up the value. The result should be combined with other fields of the bitfield using logical OR.
◆ field_prep
| #define field_prep |
( |
|
mask, |
|
|
|
val |
|
) |
| |
Value: (__builtin_constant_p(mask) ?
__FIELD_PREP(mask, val,
"field_prep: ") \
#define __FIELD_PREP(mask, val, pfx)
Definition bitfield.h:89
#define __field_prep(mask, val)
Definition bitfield.h:261
field_prep() - prepare a bitfield element @mask: shifted mask defining the field's length and position, must be non-zero @val: value to put in the field
Return: field value masked and shifted to its final destination
field_prep() masks and shifts up the value. The result should be combined with other fields of the bitfield using logical OR. Unlike FIELD_PREP(), @mask is not limited to a compile-time constant. Typical usage patterns are a value stored in a table, or calculated by shifting a constant by a variable number of bits. If you want to ensure that @mask is a compile-time constant, please use FIELD_PREP() directly instead.
◆ FIELD_PREP_CONST
| #define FIELD_PREP_CONST |
( |
|
_mask, |
|
|
|
_val |
|
) |
| |
Value: ( \
\
BUILD_BUG_ON_ZERO((_mask) == 0) + \
\
BUILD_BUG_ON_ZERO(~((_mask) >>
__bf_shf(_mask)) & (_val)) + \
\
__BF_CHECK_POW2((_mask) + (1ULL <<
__bf_shf(_mask))) + \
\
(((typeof(_mask))(_val) <<
__bf_shf(_mask)) & (_mask)) \
)
FIELD_PREP_CONST() - prepare a constant bitfield element @_mask: shifted mask defining the field's length and position @_val: value to put in the field
FIELD_PREP_CONST() masks and shifts up the value. The result should be combined with other fields of the bitfield using logical OR.
Unlike FIELD_PREP() this is a constant expression and can therefore be used in initializers. Error checking is less comfortable for this version, and non-constant masks cannot be used.
◆ __compiletime_error() [1/2]
| void __compiletime_error |
( |
"bad bitfield mask" |
| ) |
|
|
extern |
◆ __compiletime_error() [2/2]
| void __compiletime_error |
( |
"value doesn't fit into mask" |
| ) |
|
|
extern |