mips.c (mips_global_pointer): Force functions with a nonlocal goto to set up $gp.
authorRichard Sandiford <rsandifo@redhat.com>
Thu, 11 Dec 2003 20:47:10 +0000 (20:47 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 11 Dec 2003 20:47:10 +0000 (20:47 +0000)
* config/mips/mips.c (mips_global_pointer): Force functions with
a nonlocal goto to set up $gp.

From-SVN: r74547

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

index e05d2af..746a76c 100644 (file)
@@ -1,3 +1,8 @@
+2003-12-11  Richard Sandiford  <rsandifo@redhat.com>
+
+       * config/mips/mips.c (mips_global_pointer): Force functions with
+       a nonlocal goto to set up $gp.
+
 2003-12-11  James E Wilson  <wilson@specifixinc.com>
 
        PR target/13132
index 3a05443..d5d230c 100644 (file)
@@ -6052,6 +6052,11 @@ mips_global_pointer (void)
   if (current_function_profile)
     return GLOBAL_POINTER_REGNUM;
 
+  /* If the function has a nonlocal goto, $gp must hold the correct
+     global pointer for the target function.  */
+  if (current_function_has_nonlocal_goto)
+    return GLOBAL_POINTER_REGNUM;
+
   /* If the gp is never referenced, there's no need to initialize it.
      Note that reload can sometimes introduce constant pool references
      into a function that otherwise didn't need them.  For example,