Strange PIC code on ia32 since Aug. 29.
Richard Henderson
rth@cygnus.com
Wed Sep 6 01:34:00 GMT 2000
Fixed thus.
r~
* config/i386/i386.md (call_pop): Fix test for setting
current_function_uses_pic_offset_table.
(call, call_value_pop, call_value): Likewise.
Index: i386.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/i386/i386.md,v
retrieving revision 1.175
diff -c -p -d -r1.175 i386.md
*** i386.md 2000/09/04 10:13:02 1.175
--- i386.md 2000/09/06 08:30:50
***************
*** 8453,8461 ****
/* Static functions and indirect calls don't need
current_function_uses_pic_offset_table. */
if (flag_pic
! && constant_call_address_operand (operands[0], SImode)
! && (GET_CODE (XEXP (operands[0], 0)) != SYMBOL_REF
! || !SYMBOL_REF_FLAG (XEXP (operands[0], 0))))
current_function_uses_pic_offset_table = 1;
if (! call_insn_operand (XEXP (operands[0], 0), Pmode))
XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
--- 8453,8460 ----
/* Static functions and indirect calls don't need
current_function_uses_pic_offset_table. */
if (flag_pic
! && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF
! && ! SYMBOL_REF_FLAG (XEXP (operands[0], 0)))
current_function_uses_pic_offset_table = 1;
if (! call_insn_operand (XEXP (operands[0], 0), Pmode))
XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
***************
*** 8508,8516 ****
/* Static functions and indirect calls don't need
current_function_uses_pic_offset_table. */
if (flag_pic
! && constant_call_address_operand (operands[0], SImode)
! && (GET_CODE (XEXP (operands[0], 0)) != SYMBOL_REF
! || !SYMBOL_REF_FLAG (XEXP (operands[0], 0))))
current_function_uses_pic_offset_table = 1;
if (! call_insn_operand (XEXP (operands[0], 0), Pmode))
XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
--- 8507,8514 ----
/* Static functions and indirect calls don't need
current_function_uses_pic_offset_table. */
if (flag_pic
! && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF
! && ! SYMBOL_REF_FLAG (XEXP (operands[0], 0)))
current_function_uses_pic_offset_table = 1;
if (! call_insn_operand (XEXP (operands[0], 0), Pmode))
XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0));
***************
*** 8570,8578 ****
/* Static functions and indirect calls don't need
current_function_uses_pic_offset_table. */
if (flag_pic
! && constant_call_address_operand (operands[1], SImode)
! && (GET_CODE (XEXP (operands[1], 0)) != SYMBOL_REF
! || !SYMBOL_REF_FLAG (XEXP (operands[1], 0))))
current_function_uses_pic_offset_table = 1;
if (! call_insn_operand (XEXP (operands[1], 0), Pmode))
XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
--- 8568,8575 ----
/* Static functions and indirect calls don't need
current_function_uses_pic_offset_table. */
if (flag_pic
! && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
! && ! SYMBOL_REF_FLAG (XEXP (operands[1], 0)))
current_function_uses_pic_offset_table = 1;
if (! call_insn_operand (XEXP (operands[1], 0), Pmode))
XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
***************
*** 8589,8597 ****
/* Static functions and indirect calls don't need
current_function_uses_pic_offset_table. */
if (flag_pic
! && constant_call_address_operand (operands[1], SImode)
! && (GET_CODE (XEXP (operands[1], 0)) != SYMBOL_REF
! || !SYMBOL_REF_FLAG (XEXP (operands[1], 0))))
current_function_uses_pic_offset_table = 1;
if (! call_insn_operand (XEXP (operands[1], 0), Pmode))
XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
--- 8586,8593 ----
/* Static functions and indirect calls don't need
current_function_uses_pic_offset_table. */
if (flag_pic
! && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
! && ! SYMBOL_REF_FLAG (XEXP (operands[1], 0)))
current_function_uses_pic_offset_table = 1;
if (! call_insn_operand (XEXP (operands[1], 0), Pmode))
XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0));
More information about the Gcc-bugs
mailing list