aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1992-02-02 17:22:44 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1992-02-02 17:22:44 -0500
commit6e7348c1fedc354f534b59a3d156c8f56b628fb3 (patch)
tree5af35fb467fdef45a7c21ad818b2911d20bd2a76 /gcc
parenta6113470258b407e46d578407b39accac50fdec5 (diff)
downloadgcc-6e7348c1fedc354f534b59a3d156c8f56b628fb3.zip
gcc-6e7348c1fedc354f534b59a3d156c8f56b628fb3.tar.gz
gcc-6e7348c1fedc354f534b59a3d156c8f56b628fb3.tar.bz2
*** empty log message ***
From-SVN: r270
Diffstat (limited to 'gcc')
-rw-r--r--gcc/reorg.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c
index deb97e0..cee2b74 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -273,6 +273,7 @@ mark_referenced_resources (x, res, include_called_routine)
res->cc = 1;
return;
+ case UNSPEC_VOLATILE:
case ASM_INPUT:
/* Traditional asm's are always volatile. */
res->volatil = 1;
@@ -2069,9 +2070,16 @@ mark_target_live_regs (target, res)
sp, ap, and fp. Do this before setting the result of the
call live. */
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
- if (call_used_regs[i] && ! fixed_regs[i]
+ if (call_used_regs[i]
&& i != STACK_POINTER_REGNUM && i != FRAME_POINTER_REGNUM
- && i != ARG_POINTER_REGNUM)
+ && i != ARG_POINTER_REGNUM
+#if ARG_POINTER_REGNUM != FRAME_POINTER_REGNUM
+ && ! (i == ARG_POINTER_REGNUM && fixed_regs[i])
+#endif
+#ifdef PIC_OFFSET_TABLE_REGNUM
+ && ! (i == PIC_OFFSET_TABLE_REGNUM && flag_pic)
+#endif
+ )
CLEAR_HARD_REG_BIT (current_live_regs, i);
}