On 05/18/16 21:45, Mike Holmes wrote:
Maxim and I had a chat, I think this patch means to say, "for now clang will use non optimised code, but deeper analysis is needed to optimise with clang"

yes, looks like comment under "---" was confusing. This patch is not a hack it's only routes clang generated code to lock path instead of lock free path with 128 bit instructions.

Maxim.

On 18 May 2016 at 14:27, Maxim Uvarov <[email protected] <mailto:[email protected]>> wrote:

    On 05/18/16 19:48, Mike Holmes wrote:



        On 18 May 2016 at 11:56, Maxim Uvarov <[email protected]
        <mailto:[email protected]>
        <mailto:[email protected]
        <mailto:[email protected]>>> wrote:

            On 05/18/16 18:52, Mike Holmes wrote:



                On 18 May 2016 at 11:15, Maxim Uvarov
        <[email protected] <mailto:[email protected]>
                <mailto:[email protected]
        <mailto:[email protected]>>
                <mailto:[email protected]
        <mailto:[email protected]>
                <mailto:[email protected]
        <mailto:[email protected]>>>> wrote:

                    Fix compilation error for clang with disabling 128 bit
                optimization.
                    In function `_odp_atomic_u128_xchg_mm':
                    undefined reference to `__atomic_exchange'

                    Signed-off-by: Maxim Uvarov
        <[email protected] <mailto:[email protected]>
                <mailto:[email protected]
        <mailto:[email protected]>>
                    <mailto:[email protected]
        <mailto:[email protected]>
                <mailto:[email protected]
        <mailto:[email protected]>>>>
                    ---
                     I need some quick way to make clang build happy


                Why not revert whatever introduced the issue ?

                    . Clean patch can go later.

                When is "later" defined to be ?


                Why dont we just wait for the correct fix ?

            to make -m32 work now.


        why now, why do we need a fix so urgently that we dont fix it
        properly.


    There is no big urgent and patch can wait usual 24 hours. I might
    be clear describing
    problem which patch fixes to me understandable for people who did
    not look into timer test.

    I think that 2 Olas patches fixes issue with 128 bit optimization
    with gcc, but introduce some
    other things which we did not capture on review process:

    1) clangs (at least my Ubuntu clang version 3.4-1ubuntu3
    (tags/RELEASE_34/final) (based on LLVM 3.4)
    does not link with gcc build in __atomic_exchange. That means
    clang build should use generic not optimized
    for 128 bit version.

    2) Build for odp-linux has to be reproducible. And at the same
    time run on any similar arch.
    That means that all such optimizations should be under ./configure
    options (for timer it's #define ODP_ATOMIC_U128).
    Only in that case we can be sure that x86 generic build (which
    will be in ubuntu, debian, redhat and etc) will run on
    all machines, even which do not support intrisics.

    3) configure compiller detection things has to be in:
    platform/linux-generic/m4/configure.m4


    Current patch fixes (1).  But because (2) and (3) is only dance
    around configure.ac <http://configure.ac> options and no
    functional change
    expected, I think current patch might be the best approach for
    now. ./configure.ac <http://configure.ac> and reproducible build
    as well as
    move timer arch code separate file is subject for other patch and
    it's not related to timer internal implementation.

    What is your opinion?

    Maxim.



            Maxim.



                     Maxim.

         platform/linux-generic/include/odp_atomic_internal.h | 4 +++-
                     1 file changed, 3 insertions(+), 1 deletion(-)

                    diff --git
        a/platform/linux-generic/include/odp_atomic_internal.h
        b/platform/linux-generic/include/odp_atomic_internal.h
                    index 3c5606c..31c8059 100644
                    ---
        a/platform/linux-generic/include/odp_atomic_internal.h
                    +++
        b/platform/linux-generic/include/odp_atomic_internal.h
                    @@ -590,7 +590,9 @@ static inline void
                    _odp_atomic_flag_clear(_odp_atomic_flag_t *flag)
                     /* Check if target and compiler supports 128-bit
        scalars and
                    corresponding
                      * exchange and CAS operations */
                     /* GCC on x86-64 needs -mcx16 compiler option */
                    -#if defined __SIZEOF_INT128__ && defined
                    __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16
                    +#if defined(__SIZEOF_INT128__) && \
                    + defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16) && \
                    +       !defined(__clang__)

                     /** Preprocessor symbol that indicates support for
                128-bit atomics */
                     #define ODP_ATOMIC_U128
                    --
                    2.7.1.250.gff4ea60

        _______________________________________________
                    lng-odp mailing list
        [email protected] <mailto:[email protected]>
        <mailto:[email protected]
        <mailto:[email protected]>>
                <mailto:[email protected]
        <mailto:[email protected]>
                <mailto:[email protected]
        <mailto:[email protected]>>>
        https://lists.linaro.org/mailman/listinfo/lng-odp




                --         Mike Holmes
                Technical Manager - Linaro Networking Group
                Linaro.org <http://www.linaro.org/>***│ *Open source
        software
                for ARM SoCs
                "Work should be fun and collaborative, the rest follows"





-- Mike Holmes
        Technical Manager - Linaro Networking Group
        Linaro.org <http://www.linaro.org/>***│ *Open source software
        for ARM SoCs
        "Work should be fun and collaborative, the rest follows"





--
Mike Holmes
Technical Manager - Linaro Networking Group
Linaro.org <http://www.linaro.org/>***│ *Open source software for ARM SoCs
"Work should be fun and collaborative, the rest follows"


_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to