[coreboot-gerrit] Patch merged into coreboot/master: 7a8a4ab lib: Unify log2() and related functions

gerrit at coreboot.org gerrit at coreboot.org
Fri Jun 5 13:18:56 CEST 2015


the following patch was just integrated into master:
commit 7a8a4ab1d88a411ee0dad23318f98b4f29fd2f60
Author: Julius Werner <jwerner at chromium.org>
Date:   Fri May 22 16:26:40 2015 -0700

    lib: Unify log2() and related functions
    
    This patch adds a few bit counting functions that are commonly needed
    for certain register calculations. We previously had a log2()
    implementation already, but it was awkwardly split between some C code
    that's only available in ramstage and an optimized x86-specific
    implementation in pre-RAM that prevented other archs from pulling it
    into earlier stages.
    
    Using __builtin_clz() as the baseline allows GCC to inline optimized
    assembly for most archs (including CLZ on ARM/ARM64 and BSR on x86), and
    to perform constant-folding if possible. What was previously named log2f
    on pre-RAM x86 is now ffs, since that's the standard name for that
    operation and I honestly don't have the slightest idea how it could've
    ever ended up being called log2f (which in POSIX is 'binary(2) LOGarithm
    with Float result, whereas the Find First Set operation has no direct
    correlation to logarithms that I know of). Make ffs result 0-based
    instead of the POSIX standard's 1-based since that is consistent with
    clz, log2 and the former log2f, and generally closer to what you want
    for most applications (a value that can directly be used as a shift to
    reach the found bit). Call it __ffs() instead of ffs() to avoid problems
    when importing code, since that's what Linux uses for the 0-based
    operation.
    
    CQ-DEPEND=CL:273023
    BRANCH=None
    BUG=None
    TEST=Built on Big, Falco, Jerry, Oak and Urara. Compared old and new
    log2() and __ffs() results on Falco for a bunch of test values.
    
    Change-Id: I599209b342059e17b3130621edb6b6bbeae26876
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 3701a16ae944ecff9c54fa9a50d28015690fcb2f
    Original-Change-Id: I60f7cf893792508188fa04d088401a8bca4b4af6
    Original-Signed-off-by: Julius Werner <jwerner at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/273008
    Original-Reviewed-by: Patrick Georgi <pgeorgi at chromium.org>
    Reviewed-on: http://review.coreboot.org/10394
    Tested-by: build bot (Jenkins)
    Reviewed-by: Stefan Reinauer <stefan.reinauer at coreboot.org>


See http://review.coreboot.org/10394 for details.

-gerrit



More information about the coreboot-gerrit mailing list