diff options
author | Jan Hubicka <jh@suse.cz> | 2000-07-07 23:49:18 +0000 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2000-07-07 23:49:18 +0000 |
commit | b848ded1daa9b7d1a99bc4bfb418fc9f86ae87ad (patch) | |
tree | b3ce3f7d24b3a4168fd604c78858d2d36eb922cd /gcc | |
parent | 12c2c7aa823ae975e2d5e3cd07af5dfc5ecdb13b (diff) | |
download | gcc-b848ded1daa9b7d1a99bc4bfb418fc9f86ae87ad.zip gcc-b848ded1daa9b7d1a99bc4bfb418fc9f86ae87ad.tar.gz gcc-b848ded1daa9b7d1a99bc4bfb418fc9f86ae87ad.tar.bz2 |
i386.md (call_pop, [...]): Do not set current_function_uses_pic_offset_table for calls to static functions...
* i386.md (call_pop, call, call_value_pop): Do not set
current_function_uses_pic_offset_table for calls to static
functions or indirect calls.
From-SVN: r34916
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 34 |
2 files changed, 26 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33a9e0f..decd31f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Sat Jul 8 01:38:25 MET DST 2000 Jan Hubicka <jh@suse.cz> + + * i386.md (call_pop, call, call_value_pop): Do not set + current_function_uses_pic_offset_table for calls to static + functions or indirect calls. + 2000-07-07 Jim Wilson <wilson@cygnus.com> * config/ia64/ia64.c (rws_access_reg): New local write_count. If diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 40bc94d..ab2f894 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -8200,11 +8200,12 @@ emit_insn (gen_call (operands[0], operands[1])); DONE; } - - /* ??? Not true for calls to static functions. */ - if (flag_pic) + /* Static functions and indirect calls don't need + current_function_uses_pic_offset_table. */ + if (flag_pic + && constant_call_address_operand (operands[1], SImode) + && !SYMBOL_REF_FLAG (XEXP (operands[1], 0))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[0], QImode)) XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); }") @@ -8254,10 +8255,12 @@ "" " { - /* ??? Not true for calls to static functions. */ - if (flag_pic) + /* Static functions and indirect calls don't need + current_function_uses_pic_offset_table. */ + if (flag_pic + && constant_call_address_operand (operands[1], SImode) + && !SYMBOL_REF_FLAG (XEXP (operands[1], 0))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[0], QImode)) XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); }") @@ -8314,11 +8317,12 @@ emit_insn (gen_call_value (operands[0], operands[1], operands[2])); DONE; } - - /* ??? Not true for calls to static functions. */ - if (flag_pic) + /* Static functions and indirect calls don't need + current_function_uses_pic_offset_table. */ + if (flag_pic + && constant_call_address_operand (operands[1], SImode) + && !SYMBOL_REF_FLAG (XEXP (operands[1], 0))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[1], QImode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); }") @@ -8331,10 +8335,12 @@ "" " { - /* ??? Not true for calls to static functions. */ - if (flag_pic) + /* Static functions and indirect calls don't need + current_function_uses_pic_offset_table. */ + if (flag_pic + && constant_call_address_operand (operands[1], SImode) + && !SYMBOL_REF_FLAG (XEXP (operands[1], 0))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[1], QImode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); }") |