diff options
author | John Hassey <hassey@gnu.org> | 1993-09-08 15:31:02 +0000 |
---|---|---|
committer | John Hassey <hassey@gnu.org> | 1993-09-08 15:31:02 +0000 |
commit | a64ddde57891eeb946a2743f3bee80239c40c65d (patch) | |
tree | 50f6a0a19f285cd4cde5c25011f0cc8708064167 | |
parent | cfb557c4098437f07ac0d079461a29958350e3ef (diff) | |
download | gcc-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.c | 12 |
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) |