patches/gcc/3.4.6/710-all_sh-pr16665-fix.patch
changeset 747 d3e603e7c17c
parent 746 b150d6f590fc
child 748 61cd4eb6034d
     1.1 --- a/patches/gcc/3.4.6/710-all_sh-pr16665-fix.patch	Mon Jul 28 21:08:01 2008 +0000
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,44 +0,0 @@
     1.4 -diff -durN gcc-3.4.6.orig/gcc/config/sh/sh.c gcc-3.4.6/gcc/config/sh/sh.c
     1.5 ---- gcc-3.4.6.orig/gcc/config/sh/sh.c	2004-09-03 08:51:30.000000000 +0200
     1.6 -+++ gcc-3.4.6/gcc/config/sh/sh.c	2007-08-15 23:01:48.000000000 +0200
     1.7 -@@ -9107,6 +9107,15 @@
     1.8 -     }
     1.9 -   this = FUNCTION_ARG (cum, Pmode, ptr_type_node, 1);
    1.10 - 
    1.11 -+  /* In PIC case, we set PIC register to compute the target address.  We
    1.12 -+     can use a scratch register to save and restore the original value  
    1.13 -+     except for SHcompact.  For SHcompact, use stack.  */
    1.14 -+  if (flag_pic && TARGET_SHCOMPACT)
    1.15 -+    {
    1.16 -+      push (PIC_OFFSET_TABLE_REGNUM);
    1.17 -+      emit_insn (gen_GOTaddr2picreg ());
    1.18 -+    }
    1.19 -+
    1.20 -   /* For SHcompact, we only have r0 for a scratch register: r1 is the
    1.21 -      static chain pointer (even if you can't have nested virtual functions
    1.22 -      right now, someone might implement them sometime), and the rest of the
    1.23 -@@ -9189,8 +9198,24 @@
    1.24 -       assemble_external (function);
    1.25 -       TREE_USED (function) = 1;
    1.26 -     }
    1.27 -+  /* We can use scratch1 to save and restore the original value of
    1.28 -+     PIC register except for SHcompact.  */
    1.29 -+  if (flag_pic && ! TARGET_SHCOMPACT)
    1.30 -+    {
    1.31 -+      emit_move_insn (scratch1,
    1.32 -+		      gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM));
    1.33 -+      emit_insn (gen_GOTaddr2picreg ());
    1.34 -+    }
    1.35 -   funexp = XEXP (DECL_RTL (function), 0);
    1.36 -   emit_move_insn (scratch2, funexp);
    1.37 -+  if (flag_pic)
    1.38 -+    {
    1.39 -+      if (! TARGET_SHCOMPACT)
    1.40 -+	emit_move_insn (gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM),
    1.41 -+			scratch1);
    1.42 -+      else
    1.43 -+	pop (PIC_OFFSET_TABLE_REGNUM);
    1.44 -+    }
    1.45 -   funexp = gen_rtx_MEM (FUNCTION_MODE, scratch2);
    1.46 -   sibcall = emit_call_insn (gen_sibcall (funexp, const0_rtx, NULL_RTX));
    1.47 -   SIBLING_CALL_P (sibcall) = 1;