• Heiko Carstens's avatar
    s390/bitops: remove CONFIG_SMP / simplify non-atomic bitops · 370b0b5f
    Heiko Carstens authored
    Remove CONFIG_SMP from bitops code. This reduces the C code significantly
    but also generates better code for the SMP case.
    
    This means that for !CONFIG_SMP set_bit() and friends now also have
    compare and swap semantics (read: more code). However nobody really cares
    for !CONFIG_SMP and this is the trade-off to simplify the SMP code which we
    do care about.
    
    The non-atomic bitops like __set_bit() now generate also better code
    because the old code did not have a __builtin_contant_p() check for the
    CONFIG_SMP case and therefore always generated the inline assembly variant.
    However the inline assemblies for the non-atomic case now got completely
    removed since gcc can produce better code, which accesses less memory
    operands.
    
    test_bit() got also a bit simplified since it did have a
    __builtin_constant_p() check, however two identical code pathes for each
    case (written differently).
    
    In result this mainly reduces the to be maintained code but is not very
    relevant for code generation, since there are not many non-atomic bitops
    usages that we care about.
    (code reduction defconfig kernel image before/after: 560 bytes).
    Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    370b0b5f
bitops.h 19.7 KB