[SPARC] Errata workaround for GRLIB-TN-0010
authorDaniel Cederman <cederman@gaisler.com>
Wed, 29 Nov 2017 15:23:40 +0000 (15:23 +0000)
committerDaniel Hellstrom <danielh@gcc.gnu.org>
Wed, 29 Nov 2017 15:23:40 +0000 (16:23 +0100)
commit47c72733ab0cc1ca5b7bb196298ce9ecd91c1896
tree6d04b95f61c870986f2a7454cab083392e50b7d0
parentaed173734df52b9c48425840c0977c34c23a882a
[SPARC] Errata workaround for GRLIB-TN-0010

This patch provides a workaround for the errata described in GRLIB-TN-0010.

If the workaround is enabled it will:

 * Insert a NOP between load instruction and atomic
   instruction (swap, ldstub, casa).

 * Insert a NOP at branch target if load in delay slot
   and atomic instruction at branch target.

It is applicable to UT700.

2017-11-29  Daniel Cederman  <cederman@gaisler.com>

gcc/
* config/sparc/sparc.c (atomic_insn_p): New function.
(sparc_do_work_around_errata): Insert NOP instructions to
prevent sequences that could trigger the TN-0010 errata for
UT700.
* config/sparc/sync.md (atomic_compare_and_swap_leon3_1): Make
instruction referable in atomic_insns_p.

From-SVN: r255236
gcc/ChangeLog
gcc/config/sparc/sparc.c
gcc/config/sparc/sync.md