bitutils.c 1.0 KB
Newer Older
W
William Wang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
#include "bitutils.h" 

inline uint64_t _perf_get_bit_mask(int low, int high) {
    assert(low < high);
    assert(low >= 0);
    assert(high < 63);
    return ((1 << high) - 1) >> low << low;
}

inline uint64_t _perf_get_bits(uint64_t raw_data, int low, int high) {
    assert(low < high);
    assert(low >= 0);
    assert(high < 63);
    uint64_t mask = (1 << high) - 1;
    return (raw_data & mask) >> low;
}

inline uint64_t _perf_get_bit(uint64_t raw_data, int position) {
    assert(position >= 0);
    assert(position <= 63);
    return (raw_data >> position) & 1;
}

inline uint64_t _perf_set_bits(uint64_t raw_data, int low, int high, uint64_t new_value) {
    assert(low < high);
    assert(low >= 0);
    assert(high < 63);
    int mask = _perf_get_bit_mask(low, high);
    return (raw_data & mask) | ((new_value << low) & mask);
}

inline uint64_t _perf_set_bit(uint64_t raw_data, int position, int new_value) {
    assert(position >= 0);
    assert(position <= 63);
    return raw_data & ((new_value & 1) << position);
}