rs6000.md (indirect_jump): Prefer CTR over LR.
authorDavid Edelsohn <edelsohn@gnu.org>
Wed, 26 Dec 2001 18:02:17 +0000 (18:02 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Wed, 26 Dec 2001 18:02:17 +0000 (13:02 -0500)
        * rs6000.md (indirect_jump): Prefer CTR over LR.
        * xcoff.h (ASM_DECLARE_FUNCTION_NAME): Handle weak function.

From-SVN: r48315

gcc/ChangeLog
gcc/config/rs6000/rs6000.md
gcc/config/rs6000/xcoff.h

index 30d3831ad180f70b73ec0723812401fe7f1361cb..0a7b1138bb0deb1d957c51cedea1aa29f5a79deb 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-26  David Edelsohn  <edelsohn@gnu.org>
+
+       * rs6000.md (indirect_jump): Prefer CTR over LR.
+       * xcoff.h (ASM_DECLARE_FUNCTION_NAME): Handle weak function.
+
 Tue Dec 25 12:04:47 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * dwarf2out.c: Reformatting and minor code rearrangement.
index be1a141dbffc08bd1aadb80926dbbeb4f3729747..bf41db8775090319ab5cd74759f15740f99af520 100644 (file)
 }")
 
 (define_insn "indirect_jumpsi"
-  [(set (pc) (match_operand:SI 0 "register_operand" "cl"))]
+  [(set (pc) (match_operand:SI 0 "register_operand" "c,*l"))]
   "TARGET_32BIT"
-  "b%T0"
+  "@
+   bctr
+   {br|blr}"
   [(set_attr "type" "jmpreg")])
 
 (define_insn "indirect_jumpdi"
-  [(set (pc) (match_operand:DI 0 "register_operand" "cl"))]
+  [(set (pc) (match_operand:DI 0 "register_operand" "c,*l"))]
   "TARGET_64BIT"
-  "b%T0"
+  "@
+   bctr
+   blr"
   [(set_attr "type" "jmpreg")])
 
 ;; Table jump for switch statements:
index 095a5663ea845b679284c9985a9727df78cc21b1..e60f3fe8282532cfebab6447179f9dfcb15c133a 100644 (file)
@@ -345,9 +345,18 @@ toc_section ()                                             \
     SYMBOL_REF_FLAG (sym_ref) = 1;                             \
   if (TREE_PUBLIC (DECL))                                      \
     {                                                          \
-      fputs ("\t.globl .", FILE);                              \
-      RS6000_OUTPUT_BASENAME (FILE, NAME);                     \
-      putc ('\n', FILE);                                       \
+      if (RS6000_WEAK && DECL_WEAK (decl))                     \
+       {                                                       \
+         fputs ("\t.weak .", FILE);                            \
+         RS6000_OUTPUT_BASENAME (FILE, NAME);                  \
+         putc ('\n', FILE);                                    \
+       }                                                       \
+      else                                                     \
+       {                                                       \
+         fputs ("\t.globl .", FILE);                           \
+         RS6000_OUTPUT_BASENAME (FILE, NAME);                  \
+         putc ('\n', FILE);                                    \
+       }                                                       \
     }                                                          \
   else                                                         \
     {                                                          \