Commit 362aaf14 authored by Markus Armbruster's avatar Markus Armbruster Committed by Dr. David Alan Gilbert
Browse files

host-utils: Simplify pow2ceil()



Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Message-Id: <1501148776-16890-4-git-send-email-armbru@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarDr. David Alan Gilbert <dgilbert@redhat.com>
parent 43c64a09
Loading
Loading
Loading
Loading
+14 −9
Original line number Diff line number Diff line
@@ -381,18 +381,23 @@ static inline uint64_t pow2floor(uint64_t value)
    return 0x8000000000000000ull >> clz64(value);
}

/* round up to the nearest power of 2 (0 if overflow) */
/*
 * Return @value rounded up to the nearest power of two modulo 2^64.
 * This is *zero* for @value > 2^63, so be careful.
 */
static inline uint64_t pow2ceil(uint64_t value)
{
    uint8_t nlz = clz64(value);
    int n = clz64(value - 1);

    if (is_power_of_2(value)) {
        return value;
    }
    if (!nlz) {
        return 0;
    if (!n) {
        /*
         * @value - 1 has no leading zeroes, thus @value - 1 >= 2^63
         * Therefore, either @value == 0 or @value > 2^63.
         * If it's 0, return 1, else return 0.
         */
        return !value;
    }
    return 1ULL << (64 - nlz);
    return 0x8000000000000000ull >> (n - 1);
}

/**