From eeff9307bc479d7a973c2ef102643975ba0a771e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 7 Jul 2003 22:53:44 +0200 Subject: [PATCH] rs6000.c (rs6000_output_mi_thunk): Remove bogus clearing of SYMBOL_FLAG_LOCAL bit. * 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 | 7 +++++++ gcc/config/rs6000/rs6000.c | 18 +++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c874fd6da30..ae1c379076b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-07-07 Jakub Jelinek + + * 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 * opts.c (common_handle_option): Correct handling of the diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 13f3fc3320c..f3b6c30b836 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -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 -- 2.30.2