From 8dcb529511c71f818cf107964ce568b521dcb025 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 17 Dec 1997 07:07:39 -0800 Subject: [PATCH] sparc.md (jump): Don't use the annul bit around an empty loop. * sparc.md (jump): Don't use the annul bit around an empty loop. Patch from Kevin.Kelly@East.Sun.COM. From-SVN: r17124 --- gcc/ChangeLog | 5 +++++ gcc/config/sparc/sparc.md | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1ffe005be4d..a7279290faf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Dec 17 15:06:04 1997 Richard Henderson + + * sparc.md (jump): Don't use the annul bit around an empty loop. + Patch from Kevin.Kelly@East.Sun.COM. + Wed Dec 17 00:51:36 1997 Stan Cox (scox@cygnus.com) * jump.c: (optimize_jump): Don't use the return register as a diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index 8ec12f5197a..8b235fb2e49 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -5014,7 +5014,21 @@ (define_insn "jump" [(set (pc) (label_ref (match_operand 0 "" "")))] "" - "b%* %l0%(" + "* +{ + /* Some implementations are reported to have problems with + foo: b,a foo + i.e. an empty loop with the annul bit set. The workaround is to use + foo: b foo; nop + instead. */ + + if (flag_delayed_branch + && (insn_addresses[INSN_UID (operands[0])] + == insn_addresses[INSN_UID (insn)])) + return \"b %l0%#\"; + else + return \"b%* %l0%(\"; +}" [(set_attr "type" "uncond_branch")]) (define_expand "tablejump" -- 2.30.2