* config/mips/mips.c (mips_output_mi_thunk): Only load gp if not
authordaney <daney@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Jun 2007 04:27:40 +0000 (04:27 +0000)
committerdaney <daney@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 2 Jun 2007 04:27:40 +0000 (04:27 +0000)
LOADGP_ABSOLUTE and not binds_local_p.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125276 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mips/mips.c

index ba77c99..904fe7d 100644 (file)
@@ -1,3 +1,8 @@
+2007-06-01  David Daney  <ddaney@avtrex.com>
+
+       * config/mips/mips.c (mips_output_mi_thunk): Only load gp if not
+       LOADGP_ABSOLUTE and not binds_local_p.
+       
 2007-06-01  Geoffrey Keating  <geoffk@apple.com>
 
        * config/darwin.h (LINK_SPEC): Pass -fpie through to the linker.
index ddab40c..0e860b6 100644 (file)
@@ -7335,8 +7335,12 @@ mips_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
       = REGNO (pic_offset_table_rtx)
       = TARGET_CALL_SAVED_GP ? 15 : GLOBAL_POINTER_REGNUM;
 
-  /* Set up the global pointer for n32 or n64 abicalls.  */
-  mips_emit_loadgp ();
+  /* Set up the global pointer for n32 or n64 abicalls.  If
+     LOADGP_ABSOLUTE then the thunk does not use the gp and there is
+     no need to load it.*/
+  if (mips_current_loadgp_style () != LOADGP_ABSOLUTE
+      || !targetm.binds_local_p (function))
+    mips_emit_loadgp ();
 
   /* We need two temporary registers in some cases.  */
   temp1 = gen_rtx_REG (Pmode, 2);