aarch64: Fix up __aarch64_cas16_acq_rel fallback
authorJakub Jelinek <jakub@redhat.com>
Mon, 3 Aug 2020 20:55:28 +0000 (22:55 +0200)
committerJakub Jelinek <jakub@redhat.com>
Mon, 3 Aug 2020 20:55:28 +0000 (22:55 +0200)
commit90b43856fdff7d96d93d22970eca8a86c56e0ddc
treeb578f02a6d14eb12b66356923d6252857f7f240d
parent2ac7fe2769890fe4c146da9cfa6d0eabb185d7db
aarch64: Fix up __aarch64_cas16_acq_rel fallback

As mentioned in the PR, the fallback path when LSE is unavailable writes
incorrect registers to the memory if the previous content compares equal
to x0, x1 - it writes copy of x0, x1 from the start of function, but it
should write x2, x3.

2020-08-03  Jakub Jelinek  <jakub@redhat.com>

PR target/96402
* config/aarch64/lse.S (__aarch64_cas16_acq_rel): Use x2, x3 instead
of x(tmp0), x(tmp1) in STXP arguments.

* gcc.target/aarch64/pr96402.c: New test.
gcc/testsuite/gcc.target/aarch64/pr96402.c [new file with mode: 0644]
libgcc/config/aarch64/lse.S