aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hassey <hassey@gnu.org>1993-09-08 15:31:02 +0000
committerJohn Hassey <hassey@gnu.org>1993-09-08 15:31:02 +0000
commita64ddde57891eeb946a2743f3bee80239c40c65d (patch)
tree50f6a0a19f285cd4cde5c25011f0cc8708064167
parentcfb557c4098437f07ac0d079461a29958350e3ef (diff)
downloadgcc-a64ddde57891eeb946a2743f3bee80239c40c65d.zip
gcc-a64ddde57891eeb946a2743f3bee80239c40c65d.tar.gz
gcc-a64ddde57891eeb946a2743f3bee80239c40c65d.tar.bz2
(output_call): Avoid use of jsr.n r1, this loses on
the 88110. From-SVN: r5285
-rw-r--r--gcc/config/m88k/m88k.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/config/m88k/m88k.c b/gcc/config/m88k/m88k.c
index d5fe033..8a7420d 100644
--- a/gcc/config/m88k/m88k.c
+++ b/gcc/config/m88k/m88k.c
@@ -868,14 +868,20 @@ output_call (operands, addr)
If we loose, we must use the non-delay form. This is unlikely
to ever happen. If it becomes a problem, claim that a call
has two delay slots and only the second can be filled with
- a jump. */
+ a jump.
+
+ The 88110 can lose when a jsr.n r1 is issued and a page fault
+ occurs accessing the delay slot. So don't use jsr.n form when
+ jumping thru r1.
+ */
#ifdef AS_BUG_IMMEDIATE_LABEL /* The assembler restricts immediate values. */
if (optimize < 2
- || ! ADD_INTVAL (delta * 2))
+ || ! ADD_INTVAL (delta * 2)
#else
if (optimize < 2
- || ! ADD_INTVAL (delta))
+ || ! ADD_INTVAL (delta)
#endif
+ || (REG_P (addr) && REGNO (addr) == 1))
{
operands[1] = dest;
return (REG_P (addr)