• Martin Schwidefsky's avatar
    [S390] Improve code generated by atomic operations. · 39475179
    Martin Schwidefsky authored
    Git commit ea435467 changed the
    definition of atomic_t and atomic64_t for s390 by adding the volatile
    modifier to the counter field. This has an unfortunate side effect
    with newer versions of the gcc. The typeof operator now picks up the
    volatile modifier from the expression. This causes the compiler to
    think that it has to store the two temporary variable old_val and
    new_val in the __CS_LOOP for the different atomic operations to the
    stack as the variables are now volatile. Both stores are superfluous.
    
    The hack to replace typeof(ptr->counter) with int in __CS_LOOP and
    and long long in __CSG_LOOP avoids the two stores. A better solution
    would be to drop the volatile from the counter field of the atomic_t
    and atomic64_t definition. But that is a touchy subject ..
    
    Cc: Matthew Wilcox <matthew@wil.cx>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    39475179
atomic.h 8.54 KB