GENMASK_ULL 和GENMASK,产生high和low之间全是1的值

来源:互联网 发布:ember.js 教程 编辑:程序博客网 时间:2024/06/03 14:04
GENMASK_ULL(39, 21) 这行执行后的值等于0x000000ffffe00000,简单说就是将39和21 之间的bit置为1.对应的GENMASK 是产生32 bit的mask
源码如下:
#define GENMASK(h, l) \
    (((~0UL) << (l)) & (~0UL >> (BITS_PER_LONG - 1 - (h))))

#define GENMASK_ULL(h, l) \

    (((~0ULL) << (l)) & (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h))))

与之对应的是可以通过下面两个宏,来移位

#define BIT(nr)            (1UL << (nr))
#define BIT_ULL(nr)        (1ULL << (nr))