mips.c (mips_output_mi_thunk): Only load gp if not LOADGP_ABSOLUTE and not binds_local_p.
authorDavid Daney <ddaney@avtrex.com>
Sat, 2 Jun 2007 04:27:40 +0000 (04:27 +0000)
committerDavid Daney <daney@gcc.gnu.org>
Sat, 2 Jun 2007 04:27:40 +0000 (04:27 +0000)
* config/mips/mips.c (mips_output_mi_thunk): Only load gp if not
LOADGP_ABSOLUTE and not binds_local_p.

From-SVN: r125276

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

index ba77c9926d13e8b7a2583c73764ebbf4b053fdce..904fe7d7a34aadb397084fea774c6e89bcb2ac41 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 ddab40c1ffef32082c43d2e459cf0deff7cc72ce..0e860b6d3cc7ebfd1e061734ba420a74a44ad096 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);