aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1992-10-13 11:09:59 -0700
committerJim Wilson <wilson@gcc.gnu.org>1992-10-13 11:09:59 -0700
commit76542a00ceb4e026211ad4a91333b464b1b73906 (patch)
treedce01a4ed3a1f6a5a7ef73140b13949688a6ab71
parentd4f55d3b0366678c4ad72aaad0cd9cd0fe157cbf (diff)
downloadgcc-76542a00ceb4e026211ad4a91333b464b1b73906.zip
gcc-76542a00ceb4e026211ad4a91333b464b1b73906.tar.gz
gcc-76542a00ceb4e026211ad4a91333b464b1b73906.tar.bz2
(i960_output_call_insn): Emit bx instead of b, callx instead of callj.
From-SVN: r2430
-rw-r--r--gcc/config/i960/i960.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/gcc/config/i960/i960.c b/gcc/config/i960/i960.c
index 0f4e5ae..2880827 100644
--- a/gcc/config/i960/i960.c
+++ b/gcc/config/i960/i960.c
@@ -1193,15 +1193,16 @@ char *
i960_output_call_insn (target, argsize_rtx, insn)
register rtx target, argsize_rtx, insn;
{
- int non_indirect;
int argsize = INTVAL (argsize_rtx);
rtx nexti = next_real_insn (insn);
rtx operands[1];
operands[0] = target;
- non_indirect = ((GET_CODE (target) == MEM)
- && (GET_CODE (XEXP (target, 0)) == SYMBOL_REF));
+ /* The code used to assume that calls to SYMBOL_REFs could not be more
+ than 24 bits away (b vs bx, callj vs callx). This is not true. This
+ feature is now implemented by relaxing in the GNU linker. It can convert
+ bx to b if in range, and callx to calls/call/balx/bal as appropriate. */
/* Nexti could be zero if the called routine is volatile. */
if (optimize && (*epilogue_string == 0) && argsize == 0 && tail_call_ok
@@ -1210,12 +1211,11 @@ i960_output_call_insn (target, argsize_rtx, insn)
/* Delete following return insn. */
if (nexti && no_labels_between_p (insn, nexti))
delete_insn (nexti);
- output_asm_insn (non_indirect ? "b %0" : "bx %0",
- operands);
+ output_asm_insn ("bx %0", operands);
return "# notreached";
}
- output_asm_insn (non_indirect ? "callj %0" : "callx %0", operands);
+ output_asm_insn ("callx %0", operands);
return "";
}