[SPARC] Errata workaround for GRLIB-TN-0012
authorDaniel Cederman <cederman@gaisler.com>
Wed, 29 Nov 2017 15:15:48 +0000 (15:15 +0000)
committerDaniel Hellstrom <danielh@gcc.gnu.org>
Wed, 29 Nov 2017 15:15:48 +0000 (16:15 +0100)
commitdcacda0cc1c9ecd23c15e8403e8025129502fed9
treee20f603705106c0bdc0546ee661b6c279d4ba2ea
parentf7300fff74becf365cdadd23c9447521da852e84
[SPARC] Errata workaround for GRLIB-TN-0012

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

If the workaround is enabled it will:

 * Prevent any floating-point operation from being placed in the
   delay slot of an annulled integer branch.

 * Place a NOP at the branch target of an integer branch if it is
   a floating-point operation or a floating-point branch.

It is applicable to GR712RC.

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

gcc/
* config/sparc/sparc.c (fpop_insn_p): New function.
(sparc_do_work_around_errata): Insert NOP instructions to
prevent sequences that could trigger the TN-0012 errata for
GR712RC.
(pass_work_around_errata::gate): Also test sparc_fix_gr712rc.
* config/sparc/sparc.md (fix_gr712rc): New attribute.
(in_branch_annul_delay): Prevent floating-point instructions
in delay slot of annulled integer branch.

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