aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2000-07-07 23:49:18 +0000
committerJan Hubicka <hubicka@gcc.gnu.org>2000-07-07 23:49:18 +0000
commitb848ded1daa9b7d1a99bc4bfb418fc9f86ae87ad (patch)
treeb3ce3f7d24b3a4168fd604c78858d2d36eb922cd /gcc
parent12c2c7aa823ae975e2d5e3cd07af5dfc5ecdb13b (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/i386/i386.md34
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));
}")