rs6000.c (rs6000_output_mi_thunk): Remove bogus clearing of SYMBOL_FLAG_LOCAL bit.
authorJakub Jelinek <jakub@redhat.com>
Mon, 7 Jul 2003 20:53:44 +0000 (22:53 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 7 Jul 2003 20:53:44 +0000 (22:53 +0200)
* config/rs6000/rs6000.c (rs6000_output_mi_thunk): Remove bogus
clearing of SYMBOL_FLAG_LOCAL bit.
If vcall_offset fits into signed 16-bit immediate, use
one instruction for both addition and load.

From-SVN: r69055

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index c874fd6da303a38aa655b04378e193957a980970..ae1c379076b01f399b916003cc115305b86c6aaf 100644 (file)
@@ -1,3 +1,10 @@
+2003-07-07  Jakub Jelinek  <jakub@redhat.com>
+
+       * config/rs6000/rs6000.c (rs6000_output_mi_thunk): Remove bogus
+       clearing of SYMBOL_FLAG_LOCAL bit.
+       If vcall_offset fits into signed 16-bit immediate, use
+       one instruction for both addition and load.
+
 2003-07-07  Neil Booth  <neil@daikokuya.co.uk>
 
        * opts.c (common_handle_option): Correct handling of the
index 13f3fc3320c22aa505b7ea636deb57bae55fb643..f3b6c30b836f3b4170223d3026eaf055d848b68f 100644 (file)
@@ -12374,10 +12374,19 @@ rs6000_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function)
       rtx tmp = gen_rtx_REG (Pmode, 12);
 
       emit_move_insn (tmp, gen_rtx_MEM (Pmode, this));
-      emit_insn (TARGET_32BIT
-                ? gen_addsi3 (tmp, tmp, vcall_offset_rtx)
-                : gen_adddi3 (tmp, tmp, vcall_offset_rtx));
-      emit_move_insn (tmp, gen_rtx_MEM (Pmode, tmp));
+      if (((unsigned HOST_WIDE_INT) vcall_offset) + 0x8000 >= 0x10000)
+       {
+         emit_insn (TARGET_32BIT
+                    ? gen_addsi3 (tmp, tmp, vcall_offset_rtx)
+                    : gen_adddi3 (tmp, tmp, vcall_offset_rtx));
+         emit_move_insn (tmp, gen_rtx_MEM (Pmode, tmp));
+       }
+      else
+       {
+         rtx loc = gen_rtx_PLUS (Pmode, tmp, vcall_offset_rtx);
+
+         emit_move_insn (tmp, gen_rtx_MEM (Pmode, loc));
+       }
       emit_insn (TARGET_32BIT
                 ? gen_addsi3 (this, this, tmp)
                 : gen_adddi3 (this, this, tmp));
@@ -12390,7 +12399,6 @@ rs6000_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function)
       TREE_USED (function) = 1;
     }
   funexp = XEXP (DECL_RTL (function), 0);
-  SYMBOL_REF_FLAGS (funexp) &= ~SYMBOL_FLAG_LOCAL;
   funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
 
 #if TARGET_MACHO