[Gc] Re: libatomic_ops aarch64 support

Yvan Roux yvan.roux at linaro.org
Sun Feb 10 12:45:51 PST 2013


Hi Ivan,

> I've updated the files in add-aarch64-support branch - please retest it.

test_atomic fails on the AO_double_load test
test_atomic_pthreads succeeds
test_malloc and test_stack abort

here are the raw results :

root at genericarmv8:/home/test# ./test_atomic
Missing: AO_short_store
Missing: AO_short_load
Missing: AO_short_fetch_and_add
Missing: AO_short_fetch_and_add1
Missing: AO_short_fetch_and_sub1
Missing: AO_char_store
Missing: AO_char_load
Missing: AO_char_fetch_and_add
Missing: AO_char_fetch_and_add1
Missing: AO_char_fetch_and_sub1
Missing: AO_int_store
Missing: AO_int_load
Missing: AO_int_fetch_and_add
Missing: AO_int_fetch_and_add1
Missing: AO_int_fetch_and_sub1
Assertion failed test_atomic_include.h:249 (barrier: )

root at genericarmv8:/home/test# ./test_atomic_pthreads
Testing add1/sub1
Succeeded
Testing store_release_write/load_acquire_read
Succeeded
Testing test_and_set
Succeeded

root at genericarmv8:/home/test# ./test_malloc
Performing 1000 reversals of 100 element lists in 3 threads
Testing AO_malloc/AO_free
First large allocation smashed
First large allocation smashed
Aborted

root at genericarmv8:/home/test# ./test_stack
Found duplicate list element 1
Aborted

> Also I'd like to know asm generated for AO_nop_* primitives (I've changed
> __sync_synchronize to __atomic_thread_fence) and AO_double_* primitives.

here is the generated code :

AO_nop_read:
        dmb     ishld    // inner shareable load before load and load
before store
        ret

AO_nop_write:
        dmb     ish      // inner shareable any before any
        ret

AO_nop_full:
        dmb     ish
        ret

> Please rewrite CAS primitives (for AO_t and AO_double_t, relaxed and
> acquire/release/full variants) using __atomic_compare_exchange_n.

ok fine, I will do it.

> Q: Which compiler version do you use?

I use for the cross compiler the
gcc-linaro-aarch64-linux-gnu-4.7-2013.01, I use my own build, but you
can find the binary release on the Linaro engineering armv8 page in
the download section (link below), and a 2012.12 native release (the
one shipped with the vexpress64-openembedded_sdk image) and with this
one the add-aarch64-support branch build failed during the compilation
of atomic_ops.c with the error:

atomic_ops.c:96:1: error: unknown type name 'AO_TS_t'

http://www.linaro.org/engineering/armv8

> In case you have more free time (and wish to check some other targets), it
> would be good to check whether it is ok to use gcc/generic.h (starting from
> some GCC version) instead of asm-based primitives in gcc/*.h (by
> eye-inspection of asm code generated for the target comparing it to the
> instructions written in gcc/*.h files).

I don't guarantee that I will check all the targets, but will give a look ;)

> Thank you. Sorry for a delay with the answer.

No problem, many thanks

Cheers,
Yvan

> Regards,
> Ivan
>
> Fri, 8 Feb 2013, 16:53 +01:00 from Yvan Roux <yvan.roux at linaro.org>:
>
> Hi Ivan,
>
> Do you need more inputs regarding the aarch64 support, I didn't had
> time to work on this topic during the past weeks, but as I have a slot
> dedicated to that during the coming one, it would be great if you tell
> me what I can do.
>
> Cheers,
> Yvan
>
>


More information about the Gc mailing list