summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1992-01-11 03:09:10 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1992-01-11 03:09:10 +0000
commit7d15d2db671bb1734fc528b85db8fbb77d8005e9 (patch)
treeb9725b8a4849d1593d897f631e2907fdc8cadd85
parent982569f89e59f022d8baca1dce8b789f31aac021 (diff)
downloadgcc-7d15d2db671bb1734fc528b85db8fbb77d8005e9.tar.gz
*** empty log message ***
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/genemit.c5
-rw-r--r--gcc/reorg.c14
2 files changed, 12 insertions, 7 deletions
diff --git a/gcc/genemit.c b/gcc/genemit.c
index 86ed20d5805..2f4d85619c9 100644
--- a/gcc/genemit.c
+++ b/gcc/genemit.c
@@ -459,9 +459,10 @@ gen_split (split)
int operands;
if (XVEC (split, 0) == 0)
- fatal ("define_split %d lacks a pattern", insn_index_number);
+ fatal ("define_split (definition %d) lacks a pattern", insn_index_number);
else if (XVEC (split, 2) == 0)
- fatal ("define_split %d lacks a replacement pattern", insn_index_number);
+ fatal ("define_split (definition %d) lacks a replacement pattern",
+ insn_index_number);
/* Find out how many operands this function has. */
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 142081aa3ff..46f1ada5040 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -303,8 +303,8 @@ mark_referenced_resources (x, res, include_called_routine)
if (include_called_routine)
{
/* A CALL references memory, the frame pointer if it exists, the
- stack pointer, and any registers given in USE insns immediately
- in front of the CALL.
+ stack pointer, any global registers and any registers given in
+ USE insns immediately in front of the CALL.
However, we may have moved some of the parameter loading insns
into the delay slot of this CALL. If so, the USE's for them
@@ -328,6 +328,10 @@ mark_referenced_resources (x, res, include_called_routine)
if (frame_pointer_needed)
SET_HARD_REG_BIT (res->regs, FRAME_POINTER_REGNUM);
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+ if (global_regs[i])
+ SET_HARD_REG_BIT (res->regs, i);
+
/* Skip any labels between the CALL_INSN and possible USE insns. */
while (GET_CODE (insn) == CODE_LABEL)
insn = PREV_INSN (insn);
@@ -403,8 +407,8 @@ mark_set_resources (insn, res, include_called_routine)
case CALL_INSN:
/* Called routine modifies the condition code, memory, any registers
- that aren't saved across calls, and anything explicitly CLOBBERed
- immediately after the CALL_INSN. */
+ that aren't saved across calls, global registers and anything
+ explicitly CLOBBERed immediately after the CALL_INSN. */
if (include_called_routine)
{
@@ -412,7 +416,7 @@ mark_set_resources (insn, res, include_called_routine)
res->cc = res->memory = 1;
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- if (call_used_regs[i])
+ if (call_used_regs[i] || global_regs[i])
SET_HARD_REG_BIT (res->regs, i);
/* Skip any possible labels between the CALL_INSN and CLOBBERs. */